7004_4623 010_System80_OS3_Job Control_Prog Guide_Nov91 7004 4623 010 System80 OS3 Job Control Prog Guide Nov91
7004_4623-010_System80_OS3_Job-Control_ProgGuide_Nov91 7004_4623-010_System80_OS3_Job-Control_ProgGuide_Nov91
User Manual: 7004_4623-010_System80_OS3_Job-Control_ProgGuide_Nov91
Open the PDF directly: View PDF .
Page Count: 334
Download | |
Open PDF In Browser | View PDF |
UNISYS System 80 OS/3 Job Control Programming Guide Copyright © 1991 Unisys Corporation All rights reserved. Unisys is a registered trademark of Unisys Corporation. OS/3 Release 14 November 1991 Priced Item Printed in U S America 7004 4623-010 C The names, places, and/or events used in this publication are not intended to correspond to any individual, group, or association existing, IMng, or otherwise. Any similarity or likeness of the names, places, and/or events with the names of any individual, living or otherwise, or that of any group or association is purely coincidental and unintentional. NO WARRANTiES OF ANY NATURE ARE EXTENDED BY THIS DOCUMENT. Any product and related material disclosed herein are only furnished pursuant and subject to the terms and conditions of a duly executed Program Product Litense or Agreement to purchase or lease equipment. The only warranties made by Unisys, if any, with respect to the products described in this document are set forth in such License or Agreement. Unisys cannot accept financial or other responsibility that may be the result of your use of the information in this document or software material, including direct, indirect, special, or consequential damages. You should be very careful to ensure that the use of this information and/or software material complies with the laws, rules, and regulations of the jurisdictions with respect to which it is used. The information contained herein is subject to change without notice. Revisions may be issued to advise of such changes and/or additions. Correspondence regarding this publication should be forwarded to Unisys Corporation either by using the User Reply Form at the back of this manual or by addressing remarks directly to Unisys Corporation, SPG East Coast Systems Documentation Development, Tredyifrin Plant, 2476 Swedesford Road, P.O. Box 203, Paoli, PA, 19301-0203, U.S.A. Product Information Announcement UNISYS o New Release o Revision • Update o New Mail Code Title System 80 OS/3 Job Control Programming Guide This announces the release of an update to this document This guide is intended for the novice programmer with a basic knowledge of data processing but with little programming experience, and the programmer whose experience is not on Unisys systems. This update includes mode characteristic information for the 5073 magnetic tape. It also describes the SYSM64 parameter which has been added to the ASM jproc, and the BUFMODE parameter which has been added to the DD job control statement. All other changes are corrections, deletions, or expanded descriptions applicable to items present in the software prior to this release. References to other Unisys manuals have been updated to reflect the changeover to the new 1 1-digit document numbering system. You can order the update only or the complete manual with all updates. To receive only the update, order 7004 4623-010. To receive the complete manual, order 7004 4623-000. To order additional copies of this document: • • • United States customers should call Unisys Direct at 1-800-442-1424. All other customers should contact their Unisys Subsidiary Librarian. Unisys personnel should use the Electronic Literature Ordering (ELO) system. See important notice on the back of this sheet. Announcement only: Announcement and attachments: SAB, SAE, MBOO ECC3, MBO1, MBB1, MBB3 System: System 80 Release 14 Date: November 1991 Part Number: 7004 4623-010 01 NOTICE Please note that, in Release 14, the UP numbers of certain documents were changed to the new Unisys 11-digit document numbering system: Old Number New Number Old Number New Number UP-8044 UP-8076 UP-8613 UP-8811 UP-8834 UP-8839 UP-8859 UP-8870 UP-8913 UP-8985 UP-9744 UP-9745 7004 4482-000 7004 5190-000 7004 4490-000 7004 4508-000 7004 4516-000 7004 5505-000 7004 5208-000 70044524-000 7004 4532-000 7004 5919-000 7004 4540-000 7004 4557-000 UP-9748 UP-9975 UP-9976 UP-9979 Up-9g82 UP-9985 UP-9986 UP-10003 UP-12443 UP-12649 UP-14207 UP-14208 7004 4565-000 7004 4581-000 7004 4599-000 7004 4607-000 7004 4615-000 7004 5224-000 7004 4623-000 7004 5232-000 7004 5240-000 7004 4631-000 7005 3434-000 7005 3442-000 In this update, some old UP numbers are still used in references to other documents; they Will be changed in the next revision of this document. PAGE STATUS SUMMARY ISSUE: 7004 4623-010 Part/Section Page Number Update Level Cover 000 Title Page/Disclaimer 010 PSS iii 010 About This Guide v thru ix 000 Contents xi thru xix 000 1 1 thru 13 000 2 1 thru 13 000 3 lthru23 000 4 1 thru 21 22 23 thru 50 000 010 000 5 1 thru 41 000 6 1 thru 58 59, 60 61 thru 78 000 010 000 7 1 thru 17 000 8 1 thru 15 000 9 1 thru 11 000 Appendix A 1 thru 9 000 Appendix B 1, 2 000 Appendix C 1 thru 9 10 11 thru 20 000 010 000 Index I thru 13 000 Part/Section Page Number Update Level Part/Section Page Number Update Level User Reply Form Back Cover 000 Unisys uses an 11-digit document numbering system. The suffix of the document number (1234 5678-xyz) indicates the document level. The first digit of the suffix (x) designates a revision level; the second digit (y) designates an update level. For example, the first release of a document has a suffix of-COO. A suffix of -130 designates the third update to revision 1.The third digit (z) is used to indicate errata for a particular level and is not reflected in the page status summary. 7004 4623-010 Ill C UNISYS System 80 OS/3 Job Control Programming Guide Copyright © 1991 Unisys Corporation All rights reserved. Unisys is a registered trademark of Unisys Corporation. OS/3 Release 14 April 1991 Priced Item Printed in U S America 7004 4623-000 Ci The names, places, and/or events used in this publication are not intended to correspond to any individual, group, or association existing, living, or otherwise. Any similarity or likeness of the names, places, and/or events with the names of any individual, living or otherwise, or that of any group or association is purely coincidental and unintentional. NO WARRANTIES OF ANY NATURE ARE EXTENDED BY ThIS DOCUMENT. Any product and related material disclosed herein are only furnished pursuant and subject to the terms and conditions of a duly executed Program Product License or Agreement to purchase or lease equipment. The only warranties made by Unisys, if any, with respect to the products described in this document are set forth in such License or Agreement. Unisys cannot accept financial, or other responsibility that may be the result of your use of the information in this document or software material, including direct, indirect, special, or consequential damages. You should be very careful to ensure that the use of this information and/or software material complies with the laws, rules, and regulations of the jurisdictions with respect to which it is used. The information contained herein is subject to change without notice. Revisions may be issued to advise of such changes and/or additions. Correspondence regarding this publication should be forwarded to Unisys Corporation either by using the User Reply Form at the back of this manual or by addressing remarks directly to Unisys Corporation, SPG East Coast Systems Documentation Development, Tredyifrin Plant, 2476 Swedesford Road, P.O. Box 203, Paoli, PA, 193010203, U.S.A. PAGE STATUS SUMMARY ISSuE: 7004 4623-000 Part/Section Page Update Number Level. Part/Section Page Number Update Level Part/Section Page Number Update Level Cover Title Page/Disclaimer PSS iii About This Guide v thru ix Contents xi thru xix 1 1 thru 13 2 lthrul3 3 lthru23 4 lthru5O 5 lthru4l 6 lthru78 7 lthrul7 8 lthrul5 9 1 thru 11 Appendix A 1 thru 9 Appendix B 1, 2 Appendix C 1 thru 20 Index 1 thru 13 User RepLy Form Back Cover Unisys uses an 11-digit document numbering system. The suffix of the document number (1234 5678-xyz) indicates the document level. The first digit of the suffix (x) designates a revision level; the second digit (y) designates an update level. For example, the first release of a document has a suffix of -000. A suffix of -130 designates the third update to revision 1. The third digit (z) is used to indicate an errata for a particular level and is not reflected in the page status summary. 7004 4623-000 III 0 0 About This Guide Purpose This guide is one of a series of manuals designed to help the programmer use the Unisys Operating Systeml3 (OS/3). Scope This guide specifically describes job control and explains how to use it. Audience The intended audience is the novice programmer with a basic knowledge of data processing but with little programming experience and the programmer whose experience is not on Unisys systems. Prerequisites Anyone using this guide should understand basic structured programming techniques. How to Use This Guide Read the entire guide to familiarize yourself with the basic concepts it presents; then use it for reference as needed. Organization This guide is structured to proceed from the basic to the complex, addressing topics in this sequence: Job Control Overview This topic is covered in Sections 1 and 2. It tells you what job control is and how it is used by the operating system. You learn the basic concepts of a control stream and the general program logic. 70044623-000 v About This Guide Basic Job Control Programming This topic is covered in Sections 3, 4, and 5. In these sections, you become familiar with the basic job control statements used to run your programs. You also learn about job control procedure call statements (JPROCS) that can save you coding time and reduce control stream coding errors. Advanced Job Control Programming This topic is covered in Sections 6, 7, 8, and 9, building on what you learned in Sections 3, 4, and 5. You learn how you can get better performance and response from the computer by using advanced job control statements that perform functions that cannot be done with the basic set. You also learn how to write JPROC definitions that you can store in the system and how you can call them when needed. Appendixes • Appendix A discusses and illustrates the rules used in describing job control statement formats. You also learn how you should code these job control statements. • Appendix B contains supplementary information that increases your understanding ofjob control. • Appendix C contains an alphabetical listing of all the job control statements and JPROCS and their parameters. You can use this as a quick-reference chart. Results After reading this guide, programmers will be able to use job control statements and JPROCS to specify to the operating system what specific work it must do. Notation Conventions The general conventions that apply to the coding formats presented in this guide are described in Appendix A. vi 70044623-000 About This Guide Related Product Information The following Unisys documents may be useful in understanding and implementing job control. Note: Use the version that applies to the software level in use at your site. Integrated Communications Access Method (ICAM) Utilities Programming Guide, 7004 4565 This guide describes how programmers can use the utility routines provided by ICAM. Job Control Programming Reference Manual, UP-9984 This manual is a quick-reference document for programmers familiar with OS/3. It describes the job control statements and job control procedures used in a System 80 environment to communicate with job control. It also presents the procedure definition statements that allow expansion and conditional modification of the job stream when you start the job. System Service Programs (SSP) Operating Guide, UP-8841 This guide describes the system service programs. They are utility programs that support the operation and organization of the operating system. They include the SAT and MIRAM librarians, the linkage editor, the disk, tape, and diskette prep routines, and various copy routines. Consolidated Data Management Macroinstructions Programming Guide, 70044607 This guide describes consolidated data management (CDM), a collection of program modules that handles the movement of data between input and output devices on your system. It also describes the consolidated data management macroinstructions, which let you obtain information about the characteristics of your file or request that consolidated data management process the files you defined for your program. Models 8-20 Operations Guide, 70045208 This guide describes the hardware configuration of the System 80 models 8-20 and presents procedures for initializing the system. It also covers all commands and procedures used in the OS/3 environment. Model 7E Operations Guide, 7002 3866 This guide describes the hardware configuration of the System 80 model 7E and presents procedures for initializing the system. It also covers all commands and procedures used in the OS/3 environment. 7004 4623-000 vii About This Guide Model 50 Detailed Operations Guide, 7004 1942 This guide describes the hardware configuration of the System 80 model 50 and presents procedures for initializing the system. It also covers all commands and procedures used in the OS/3 environment. Supervisor Technical Overview, UP-8831 This manual presents an overview of the OS/3 supervisor and its functions for OS/3 high-level language programmers and site administrators. Supervisor Macroinstructions Programming Reference Manual, UP-8832 This manual describes, for the assembler programmer, the OS/3 supervisor macroinstructions used for program management, file space management, file access, multitasking, and spooling. It also provides formats and coding conventions for the macroinstructions, diagnostic and debugging information, and examples of macroinstruction use. Models 8-20 Installation Guide, 70045505 This guide provides the system administrator with the information and procedures needed to install, tailor, and maintain 05/3 software in a System 80 models 8-20 environment. Model 7E Installation Guide, 7002 3858 This guide provides the system administrator with the information and procedures needed to install, tailor, and maintain OS/3 software in a System 80 model 7E environment. Model 50 Installation Guide, 70041892 This guide provides the system administrator with the information and procedures needed to install, tailor, and maintain OS/3 software in a System 80 model 50 environment. Interactive Services Operating Guide, UP-9972 This guide describes procedures used to communicate with the operating system interactively through a local workstation or remote terminal. It also describes the procedures for logging on and off the system and performing various interactive commands. File Cataloging Technical Overview, 70044615 This overview describes the 05/3 file cataloging facility in a System 80 environment for the system administrator or programmers who are authorized to control use of the system catalog file. vi 7004 4623-000 About This Guide Spooling and Job Accounting Operating Guide, 7004 4581 This guide describes basic spooling and job accounting concepts. Screen Format Services Technical Overview, UP-9977 This overview describes how programmers can use screen format services to create and maintain formatted screen displays to be used with their application programs. Menu Services Technical Overview, UP-9317 This overview describes the procedures for creating and using menus. It also describes how menus, displayed on the workstation screen, can be used with assembler, COBOL, RPG II, and FORTRAN IVTM programs. Dialog Processor Programming Guide, UP-8858 This guide provides the experienced programmer with information on the dialog processor, which is the interface between the dialog (written in dialog specification language) and the application program using the dialog. Distributed Data Processing Programming Guide, 7004 4508 This guide describes OS/3 distributed data processing and the various distributed data processing program products. General Editor (EDT) Operating Guide, 7004 4599 This guide describes the commands and procedures needed to use the OS/3 general editor to copy files, concatenate files, and create and modify library modules and data files interactively from a workstation. Consolidated Data Management Programming Guide, UP-9978 This guide describes consolidated data management and how it moves data between peripheral devices and programs. Assembler Programming Guide, 7004 4532 This guide describes the OS/3 basic assembly language (BAL) and its use. Included are general language concepts, assembler instructions, and programming techniques. Data Utilities Operating Guide, 7004 4516 This guide provides the information needed to use the data utilities. Included are instructions on executing data utilities interactively and for batch jobs. FORTRAN LV is a trademark of SuperSoft Associations. 7004 4623-000 ix 0 0 Contents About This Guide Section 1. Overview Why You Need Job Control Job Control Statements and Job Control Streams Job Steps Job Control Procedures (JPROCS) Job Control and the Operating System Processing a Job Control Stream Beginning Job Processing the Run Processor Considering Jobs for Execution the Job Scheduler Beginning Job Execution the Job Initializer Initializing a Job Step the Job Step Processor Ending the Job Step the Job Step Processor Ending the Job the Job Terminator Building and Storing Job Control Streams and JPROCS Saving Translated, Expanded Job Control Streams (Save/Restore Facility) Running Job Control Streams - - - - - - Section 2. 1-2 1-3 1-5 1-5 1-6 1-7 1-7 1-8 1-9 1-9 1-10 1-11 Basic Concepts Assigning Devices and Files Peripheral Devices and Logical Unit Numbers (DVC Statement) Volume Serial Numbers for Disk, Diskette, and Tape (VOL Statement) File Identifiers (LBL Statement) Disk and Format-Label Diskette File Area (EXT Statement) Data-Set-Label Diskette File Area (EXT Statement) Logical File Names (LFD Statement) Device Assignment Set Placement and Duration Job Termination Restarting a Job Branching within a Control Stream Jobs and Main Storage Job Roll-Out/Roll-In Minimum and Maximum Main Storage Dynamic Expansion of Main Storage 7004 4623-000 1-1 1-1 2-1 2-2 2-3 24 2-5 2-6 2-7 2-9 2-10 2-11 2-11 2-12 2-12 2-12 2-13 xi Contents Section 3. C Minimum Control Stream Requirements What Is a Minimum Control Stream’ Constructing the Minimum Control Stream The Beginning of the Job Identifying the Devices Assigning a Logical File Name to the File Executing the Program Ending the Basic Control Stream Ending the Card Reader Operation The Control Stream So Far A Review Adding Card Input Card Input and Embedded Data The Program Is Changed Another Device What Is Needed to Use a Tape 7 The Logical Unit Number and File Name for the Tape Supplying a Volume Serial Number for the Tape Labeled Tapes for File Identification Another Programming Change Another Device Assignment The Device Assignment Set for a Disk or Format-Label Diskette The Device Assignment Set for Data-Set-Label Diskette The Device Assignment Set for a Workstation The UID Job Control Statement The USE Job Control Statement Job Step Temporary and Job Temporary Files Basic Job Control Statements 3-1 3-1 3-3 3-4 3-5 3-6 3-8 3-8 3-9 3-10 3-12 3-14 3-14 3-15 3-15 3-17 3-18 3-20 3-21 3-21 3-22 3-22 3-23 3-23 - - - Section 4. Getting the Most Out of the Basic Job Control Statements Optional Parameters Can Improve Job Performance Improving Your Control of the Job A Selection Priority for the Job Main Storage Needs More Main Storage to Speed Up the Job Multitasking Specification The Processing Time for the Job Debugging the Control Stream Job Accounting and Spool Buffers Printing the Job Log File and Page Headers Identifying the Peripheral Devices a Little Further Using Multiple Devices, SYSRES, or the Job’s $Y$RUN File Specifying Multiple Workstations More Control over Peripheral Devices Assigning Devices by Physical Address and Assigning Real Devices Is This Device Needed for This Particular Run’ Different Volumes on the Same Device 4-1 44 4-2 4-2 4-3 4-4 4-5 4-6 4-7 4-8 4-9 4-9 4-10 4-11 4-11 4-12 4-12 C xii 70044623-000 Contents Multiple Volumes in a File? Use Alternate Devices to Decrease Operator Setup Time Ensuring that Workstations Are Connected to a Job Specifying a Remote Disk File Indicating Use of the DDP Program-to-Program Facility More Information about the Characteristics of Your Volumes More Than One Volume in a File Special Characteristics of Tape Volumes Extending Your Tape Volumes Sharing Disk Volumes Ignoring or Changing the Volume Serial Number Multivolume Files Online Simultaneously More Information on Disk and Format-Label Diskette File Allocation The File Type Formatting a File and Using Contiguous Space Your Disk or Format-Label Diskette File Needs More Space Terms of Allocation Allocation Amounts Changing the Specifications of a Previously Allocated File Allocating Space in the Fixed-Head Area of Your 8417 Disk No Terminate Option for Insufficient Extent Space Information about Data-Set-Label Diskette File Allocation Using Your File Identifier More Efficiently Multivolume File? Assign Each Volume a File Serial Number The Expiration and Creation Date of the File Indicating the Position of the File when Several Are on a Tape Volume Different Versions of a File Changing the Label of a Disk File Specifying Qualifiers for File Identifiers More Information about the Logical File Reserving an Extent Information Storage Area Specifications for Existing Files Indicating Where the Load Module Is Located Task Switching Priority Avoiding Abnormal Termination due to Program Errors The Job Control Language So Far Section 5. Doing It the Easy Way with Procedure Calls - What Is a Procedure 7 Setting Up Temporary Work Files Using Your Own Volume Providing the Extent Specifications Accessing Previously Allocated Files Allocating a File with a JPROC Call Too Many Devices for the Same Volume Using the Linkage Editor Generating LOADM and INCLUDE Linkage Editor Control Statements Making the Linkage Editor Suit Your Needs 7004 4623-000 4-14 4.15 4-16 4-17 4-19 4-20 4-21 4-22 4-24 4-24 4-27 4-27 4-27 4-28 4-29 4-30 4-31 4-33 4-34 4-34 4-34 4.35 4-36 4-37 4-38 4-39 4-40 4.43 4-44 4-44 4-45 4-46 4-48 4-50 4-50 5-1 5-2 5-5 5-6 5-8 5-10 5-13 5-16 5-21 5-23 xiii Contents C Personalizing Your Print Output Controlling Spooled Output with a JPROC Call Section 6. 5-33 5-38 Making Job Control Work for You Advantages of Using Advanced Job Control Statements Controlling Spooled Output with a Job Control Statement Sending Spooled Output to Remote Batch Processing Terminals Sending Spooled Output to DDP Sites and Auxiliary Workstation Printers Spooling Input Card Data Spooling Diskette Files Equating Logical Unit Numbers to Device Type Codes Specifying Unique Load Codes Using Forms Control Controlling Tape Units Releasing (Freeing) a Device and Volume Scratching Unwanted Files File Cataloging Selecting Optional Features Using the SET Job Control Statement Changing the Date Setting the UPSI The Communications Region The User Local Data Area (LDA) Restarting a Job Restarting a Job from a Job Step Restarting a Job from a Checkpoint Record Issuing System Commands Calling Control Streams Using the RV/RUN Job Control Statements to Call Control Streams Using CC SC/SI to Call Saved Translated Control Streams Communicating with the System Operator or Workstations Introducing Processing Options Defining Software Facilities Needed by Your Job Making Temporary Changes to a Load Module Changing Your File Definition at Run Time Adding Cards to a Stored Control Stream Bypassing Job Control Statements Bypassing Job Control Statements to Avoid Abnormal Termination Dynamic Skip Function from a Workstation Substituting Embedded Data Replacing Embedded Data Sets in Expanded Control Streams Job Control Considerations for Screen Format Services, Menu Services, and Dialog Processing The USE Statement for Screen Format Seriices The USE Statement for Menu Services The USE Statement for Dialog Processing Source Module Access via the USE Statement xiv .... 6-1 6-1 6-3 6-4 6-7 6-9 6-10 6-11 6-16 6-20 6-22 6-24 6-26 6-26 6-39 6-39 6-39 6-40 6-41 6-42 6-43 6-44 6-45 6-47 6-48 6-49 6-50 6-52 6-53 6-56 6-58 6-61 6-63 6-68 6-69 6-69 6-70 6-72 6-73 6-74 6-76 6-78 70044623-000 Contents Section 7. Run-Time Conditional and Set Symbol Job Control Statements Run-Time Conditional Job Control Statements Unconditional Branching Conditional Branching Providing Targets for Branching Run-Time Set Symbols Global Status Set Symbols Local Status Set Symbols Specifying Set Symbol Values in Quotes Using Symbols to Examine Job and System Related Values and Facilities Priorities among Set Symbols, Keyword Parameters, and Positional Parameters Section 8. 8-i 8-1 8-3 8-3 8-4 8-5 8-6 8-7 8-9 8-10 9-1 9-3 9-8 9-8 9-9 Statement Conventions Job Control Statement Format How Job Control Statements Are Presented Coding Conventions Statement Continuation Software Conventions 7004 4623-000 7-16 Using the Interactive Job Control Dialog The Function of the Job Control Dialog Building a Control Stream with the Job Control Dialog Building a User JPROC with the Job Control Dialog Entering Embedded Data Changing Dialog Responses Appendix A. 7-13 How to Write and Call a Job Control Procedure Definition The Benefit of Procedure Definitions Coding Rules Parameter Types The Start of the JPROC Definition Naming the JPROC Definition Ending the JPROC Definition Calling JPROC Definitions How JPROC Definitions Are Stored Specifying an Alternate Library File to Be Searched for JPROCS Parameter Referencing Section 9. 7-i 7-i 7-2 74 7-5 7-5 7-10 7-12 A-i A-2 A-7 A-8 A-9 xv Contents Appendix B. Operation Considerations System Libraries Volume Table of Contents Appendix C. B-i B-2 Job Control Statement Formats Job Control Statements Job Control Procedures C-i C-9 Index User Reply Form Xvi 70044623-000 Figures 1-1. 1-2. Operating System/3 (OS/3) Job Processing Flow 1-3 1-5 2-1. Job Region in Main Storage 2-13 9-1. 9-2. 9-3. Using the Job Control Dialog to Build a Control Stream or User JPROC Audit Version of the Dialog Processor Changing Your Dialog Responses 9-2 9-10 9-11 70044623-000 xvii C C n Tables 41. Mode Characteristics 4-22 &1. DD Supported Keywords 6-60 7-1. Keywords and Symbol Values for 1/ INQ JOB and // INQ SYS 7-15 7004 4623-000 xix 0 0 0 Section 1 Overview Why You Need Job Control To process any program, the operating system must have some necessary instructions and information. Should the system compile, link edit, or execute a program? Does it know what files a program uses, which devices to reserve, and how much main storage a program needs? Should it allocate space for a file? For the operating system to know what specific work what job you want it to do and how, you must supply this type of information to that part of OS/3 called job control. - - To communicate with job control, you use OS/3 job control language (JCL), which consists ofjob control statements and job control procedures (JPROCS). The statements and JPROCS you code make up ajob control stream. Job Control Statements and Job Control Streams Each of the many job control statements has a different function but they are combined in a control stream to do a singular job. OS/3 requires that every job have a control stream. Using three statements, II JOB, II EXEC, and /&, we can show you the following outline job control stream required for executing a program: Job control stream for executing a program If JOB MYJOB Identifies your job and indicates the beginning of the control stream. If EXEC PROG1 Specifies execution of the program PROG1. /& Indicates the end of the control stream. These three statements illustrate the idea of a job control stream, but you’ll see in later sections that you must also include statements identifying files and devices. Additional statements are used, depending on the specific function needed to accomplish your job. You can also include program data in the control stream. In this guide, we’ll explain the function of each job control statement and its parameters so you can build simple as well as complex job control streams. 70044623-000 1-1 Overview Job Steps Any job can have one or more steps. If, for example, you want to execute three programs, one after the other, you can construct one job control stream with three (job) steps like this: 1/ JOB MYJOB Job step 1 /1 EXEC PROG1 Job named F4YJOB . Job step 2 II EXEC PROG2 Job step 3 II EXEC PROG3 /& Ajob can have up to 254 job steps. The steps are processed serially and the EXEC job control statement normally marks the end of each one. Job Control Procedures (JPROCS) Besides using individual job control statements in your control stream, you can use job control procedures (JPROCS). A JPROC is a series ofjob control statements that performs a certain function or routine. JPROCS are supplied as part of the system End you can also write your own. They are filed in a library and each JPROC has its own name. (See “Building and Storing Job Control Streams and JPROCS” in this section.) When referenced by that name in a job control stream, the statements that make up the JPROC are generated and incorporated into the control stream. You may frequently need some function that a specific group ofjob control statements performs. Instead of coding the same group of statements in every job control stream requiring that function, you can simply define the statements as a JPROC, then code the JPROC name. Compiling a source program, for example, is something that’s done often. If you include a certain system supplied JPROC name in your job control stream, all the statements necessary for the language processor to compile your source program are generated. The following simplified control stream specifies the COBOL language processor JPROC. 1-2 70044623-000 Overview II JOB MYJOB /1 COBOL Causes the generation of job control statements that identify files and devices needed by the COBOL language processor. Executes the language processor so that a source program can be compiLed. /& System-supplied and user-written JPROCS are explained in Sections 2 and 3. Job Control and the Operating System To better understand what job control does, it heips to know where job control fits into the operating system. Unisys Operating Systeml3 (OS/3) is divided into two parts: the executive and the system support software components. Job control is part of the executive portion of OS/3. Together, the supervisor and job control manage job processing for 05/3. Figure 1-1 shows the executive and system support software components of OS/3. EXECUTIVE SUPERVI SOR JOB CONTROL SYSTEM SUPPORT SOFTWARE COMPONENTS DATA MANAGEMENT DATA BASE MANAGEMENT SYSTEM LANGUAGE PROCESSORS INTEGRATED COMMUNICATIONS ACCESS METHOD APPLICATIONS SYSTEM SERVICE PROGRAMS EMULATORS I N FORMAT ION MANAGEMENT SYSTEM DIAGNOSTIC PROGRAMS Figure 1-1. Operating System/3 (OS/3) 7004 4623-000 1-3 Overview The supervisor controls the sequence and position of your programs and system programs in main storage. For more information on supervisor facilities, see the Supervisor Technical Overview, UP-8831. Job control manages system facilities and prepares the system for job execution. In general, it does the following: • Assigns ajob number to every active job and symbiont • Analyzes the job control stream • Checks the order and syntax of control statements • Expands job control procedures (JPROCS) • Schedules jobs and queues them according to priority • Allocates peripheral devices and main storage These and some of the other functions that job control is responsible for are handled by (system) programs called symbionts. Symbionts are normally executed in response to a user request that may be in the form of a system console command, a workstation command, or certain job control statements. Symbionts compete for main storage and CPU time along with your jobs. The run processor, which begins processing your job control streams, is a symbiont. We’ll be discussing the run processor in the next section. 1-4 7004 4623-000 Overview Processing a Job Control Stream You can build job control streams on disk, data-set-label diskette, or on cards. Looking at Figure 1-2, you can see that job processing involves several steps. OR OR $V$RUN FILE (CONTAINS TRANSLATED JOB CONTROL STREAM, INCLUDING EXPANDED JPROCSI Figure 1-2. Job Processing Flow A brief discussion of each step in the job processing flow should give you a general idea of what happens after job control accepts a request to process a job. Beginning Job Processing the Run Processor - The run processor begins job processing by scanning the control stream, translating the job control statements into tables on disk, and expanding JPROCS. At this point, it also checks the stream for order and syntax errors. If there are errors, no further preparation of the job is made and job control error messages are generated. 7004 4623-000 1-5 Overview Once the control stream is translated, the run processor places it in the $Y$RUN system file (a $Y$RUN file is created for every job being processed). The name of the job (obtained from the II JOB statement) is entered in a table called the job queue table. The job queue table contains the names of all jobs waiting to be executed. The jobs are ordered by a priority specified on the JOB statement (or, as you’ll see later, on other jobcontrol statements or workstation/console commands). Within a particular priority, the jobs are ordered on a first-in, first-out basis. C RUN PROCESSOR • Translates job control statements • Expands JPROCS • Checks order and syntax of control stream • Builds control blocks • Enters job name in job queue table Creates $Y$RUN file Considering Jobs for Execution the Job Scheduler - After the run processor prepares your job control stream, processing control passes to the job scheduler, which checks the job queue table. If there are jobs in the queue table, the scheduler determines which jobs will be executed next. The job priority and the availability of system resources (peripheral devices and main storage) are the basis for this determination. Ajob can have one of four priorities: preemptive, high, normal, or low. At any one time, the job queue table can contain the names of up to 15 preemptive priority jobs, 39 high priority jobs, 71 normal priority jobs, and 15 low priority jobs. The job scheduler considers preemptive jobs for execution first, followed by high, normal priority, and low jobs (in that order). Jobs are considered within each priority level on a first-in, first-fit basis. Lower priority jobs are not considered until there are no other higher priority jobs in the job queue table. Jobs in HOLD status are not considered at all. Before job execution can start, sufficient main storage and the necessary peripheral devices must be available. The job scheduler checks for both; and if both are not available, the job is left in the job queue table. A slightly different situation exists if roll-out is configured with the system. (See “Job Roll-OutJRoll-In” in Section 2.) C 1-6 70044623-000 Overview In addition to checking priority and the availability of main storage and peripheral devices, the job scheduler maintains the shared code directory, reserves volumes, maintains a volume use table for all jobs, deletes your job name from the job queue table, and displays your job name at the system console. JOB SCBEDULER FUNCTION • Considers your job for execution by priority • Reserves devices and main storage for your job so that job execution can begin • Deletes the job name from the job queue table • Displays the job name on the system console Beginning Job Execution the Job Initializer - Processing control passes to the job initializer when job execution is ready to begin. Up to 47 jobs can be executed concurrently. The job initializer also loads shared code modules, activates job accounting, and updates job log status. JOB INITIALIZER FUNCTION • Builds job preamble • Loads shared code modules • Activates job accounting • Updates job log status Initializing a Job Step the Job Step Processor - The job step processor performs the functions necessary for initializing and completing a job step. At this point in job processing, the program specified on the EXEC statement is loaded and executed. 7004 4623-000 1.7 Overview C JOB STEP PROCESSOR FUNCTION (STEP INITIALIZATION) • Reviews volume requirements • Reviews device allocation • Updates system volume use table • Allocates devices and disk space • Locates and updates file control blocks • Locates and posts address of embedded data • Stores logging data • Performs utility functions (rewinding tapes, scratching files, etc.) Ending the Job Step the Job Step Processor - The job step processor also performs the end-of-job-step housekeeping duties. If this is the last step in the job, the job step processor passes processing control to the job terminator; if not, it retains processing control for initialization of the next job step. JOB STEP PROCESSOR FUNCTION (STEP TERMINATION) • Updates job preamble • Initiates burst mode printing of spool files • Records logging data • Scratches job step (temporary) work files 0 1-8 7004 4623.000 Overview Ending the Job the Job Terminator - When the last step in the job has been processed, the job terminator receives control to perform end-of-job housekeeping duties. JOB TERMINATOR • Deletes job name from system console • Scratches job temporary files • Scratches job’s $Y$RUN file • Requests printing of log and spooi files • Displays job termination message • Frees memory and releases devices • Clears job entries from system volume use table Building and Storing Job Control Streams and JPROCS Here are some ways you can build and store job control streams: • If you have UDS-200 data entry equipment, you can use it offline to place job control statements directly onto data-set-label diskettes. • You can use the general editor (EDT) to build control streams at a workstation. Depending on the instructions you give the editor, the control stream can then be placed on data-set-label diskette, in the spool file, in a permanent job control stream library on disk or format-label diskette, or on cards. You can specifSr a permanent SAT library of your own as the stream’s destination, or you can use $Y$JCS, the system job control stream library. The General Editor (EDT) Operating Guide, 7004 4599, explains the use of the general editor. • You can use the job control dialog to build control streams. The dialog stores the completed stream in $Y$JCS. Section 9 explains the interactive job control dialog. • If the control stream is already on data-set-label diskette, in the spool file, or on cards, you can use a FILE system console command or the FILE workstation command to place the stream in a permanent SAT library. The FILE system console command is explained in your operations handbook and the FILE workstation command is discussed in the Interactive Services Operating Guide, UP-9972. 70044623-000 1-9 Overview C For JPROCS to function as intended, you must store them in $Y$JCS or your own SAT library. So whether you use EDT or the job control dialog, the eventual destination of the JPROC is a permanent library. See “How JPROC Definitions Are Stored” in Section 8 for more information on storing JPROCS. Saving Translated, Expanded Job Control Streams (Save/Restore Facility) Before a job can be executed, no matter how often its been executed already, it must be translated and have any JPROCS expanded first. This is done by the run processor, and for some jobs (especially those with many JPROCS) this takes a long time. You can reduce this time by saving the control stream in its translated, expanded state. Because the rim processor can skip the step of translating and expanding this type of control stream when it is restored and job processing starts, the job’s execution begins sooner. To save a job control stream in its translated, expanded state, you simply include the II OPTION SAVE or II OPTION NOSCHED statement in the control stream. (See “Selecting Optional Features” in Section 6.) When job processing is initiated and the run processor finishes expanding and translating the control stream, a copy of the stream (as it appears in $Y$RUN) is placed in a permanent MIRAM library. You can specify your own library or you can use the system library $Y$SAVE. Depending on which OPTION statement you used, processing then proceeds through execution (OPTION SAVE) or stops as soon as the expanded, translated stream is placed in the specified library (OPTION NOSCHED). In either case, youll have a copy of the expanded stream in a permanent library. When a translated stream is processed, the OPTION SAVE/NOSCHED statement is ignored. If you intend to process the untranslated stream, you should remove the OPTION SAVE/NOSCHED statement. A command different from the one used to initiate processing of the untranslated stream is used for the translated one. See “Running Job Control Streams” later in this section for more information. C 1-10 70044623-000 Overview CONTROL STREAM CONIAINING _1 OPTION SAVE. NOSCHED OR AN ALTERNATE SAT I EXPANDED. TRANSLATED CONTROL STREAM I I SYSSAVE LIBRARY oNrROL STREAM PROCESSING I I YSJCS OR AN ALTERNATE SAT LIBRARY ALTERNATE MIRAM LIBRARY ORIGINAL CONTROL STREAM When deciding whether or not to save expanded, translated control streams, keep the following in mind: these streams take up more disk space than untranslated ones, you can’t use them to update a file catalog (see “File Cataloging” in Section 6), and you can’t change parameters on any of the job control statements. Replacing embedded data sets is the most extensive change you can make to these streams (see “Replacing Embedded Data Sets in Expanded Control Streams” in Section 6). Remember, you cannot use a hyphenated job name if you intend to save your translated control stream; the save processor does not recognize the hyphen. Running Job Control Streams Running a job control stream is a term commonly used in place of processing a control stream. In 05/3 there are several ways you can initiate the running of a control stream. These include the RV/RUN system console and workstation commands, the II RV/RUN job control statements, the SC/SI system console and workstation commands, and the II CC SC/SI job control statements. The differences between these commands and statements are summarized as follows: RV system console or workstation command This command initiates a stored control stream from a workstation or system console that does not need an input device. 70044623-000 1-11 Overview • RUN system console or workstation command This command initiates a job control stream from a workstation or system console that needs an input device. This may mean the control stream to be run is on a data-set-label diskette, in the spooi file, or on cards. It may mean the control stream is stored in $Y$JCS or an alternate SAT library file but contains a CR job control statement and, therefore, will need an input device to complete processing. (See “Adding Cards to a Stored Control Stream” in Section 6.) • II RVjob control statement This statement, when encountered in an executing job control stream, initiates the running of another control stream. • II RUN job control statement This statement, when encountered in an executing job control stream, initiates the running of another control stream. You can use II RUN if the control stream is on cards or is stored in a library but contains all CR statement because card input is needed to complete job processing. • SC system console or workstation command This command initiates an expanded, translated control stream (stored in $Y$SAVE or an alternate MIRAM library) that does not require replacement of embedded data and, therefore, does not need an input device. • SI system console or workstation command This command initiates an expanded, translated control stream from $Y$SAVE or an alternate MIRAM library that needs an input device for the replacement of embedded data. • ll CC SC job control statement This job control statement, when encountered in an executing control stream, initiates an expanded, translated control stream from $Y$SAVE or an alternate MIRAM library that does not require replacement of embedded data and, therefore, does not need an input device. • II CC SI job control statement This job control statement is used the same as II CC SC except that it initiates an expanded, translated control stream from $Y$SAVE or an alternate MIRAM library requiring an input device for the replacement of embedded data. 1-12 70044623-000 Overview For information about system console commands, see the appropriate operations guide. For information about workstation commands, see the Interactive Services Operating Guide, UP-9972. For information about the II CC SC/SI and II RV/RUN job control statements, see, respectively, the “Using the RV/RUN Job Control Statements to Call Control Streams” and “Using CC SC/SI to Call Saved Translated Control Streams” in Section 6. 70044623-000 1-13 C Section 2 Basic Concepts Assigning Devices and Files An important part of writing ajob control stream is identifying devices and files and establishing a logical connection between the files and the program using them. The following job control statements help you do this: DD EXT LED UID DST LBL ROUTE USE DVC LCB SPL VFB VOL The DVC and LFD statements (in that order) are required for every type of file and device you use. The other statements (when used) must appear between the DVC and LFD statements. They’re necessary depending on the kind of file, or function you want performed in relation to that file. As a group, these statements are called a device assignment set. If JOB MYJOB Device assignment set for a fiLe used by PROG1 If DVC... If LFD... 1/ EXEC PROG1 The CAT, DECAT, EQU, FREE, REN, and SCR job control statements are not coded between the DVC and LFD statements; so, technically, they’re not part of a device assignment set, but their function is related. We’ll talk about these in later sections. In this section, we’ll talk about the DVC, VOL, LBL, EXT, and LFD job control statements to help you become familiar with the overall function of a device assignment set. 70044623-000 2-1 Basic Concepts Peripheral Devices and Logical Unit Numbers (DVC Statement) A peripheral device is any unit of equipment, distinct from the central processor and main storage, that allows the system to send or receive data. Some devices, such as card readers, only handle incoming data (input); some, such as printers and card punches, can only handle outgoing data (ouput); while others, such as disks, formatlabel diskettes, tapes, and workstations, can handle both (input and output). In OS/3, each type of peripheral device is assigned a specific number called a logical unit number. You specify logical unit numbers in the DVC job control statement. This tells job control (the job scheduler) which peripheral devices you need for your job. Suppose you need a printer because your program produces printed output. The following information (taken from Table A-i of the Job Control Programming Reference Manual, UP-9984) shows some logical unit numbers for printers. Logical Unit No. Device Type Code 04040000 04010000 04020000 04FF0000 04400000 04100000 04200000 04800000 14, 16, 18, 20, 22, 24, 26, 28, 15 17 19 21 23 25 27 29 Device Type and Features 0791 correspondence quality printer 0798 printer, no optionaL features 0789 printer Any printer, no features specified 9246 printer, no features specified 0776 printer, no optional features AP9215 printer, no features specified 0770 printer, no optional features If you need a Unisys 0776 printer, specify either 24 or 25 on the DVC statement. If any printer will do, specify 20 or 21. Device assignment for the 0776 printer f II If 1/ /1 JOB MYJOB DVC 24 1 LFD.... EXEC PROd Device assignment for any avaiLabLe printer f II If If If JOB MYJOB DVC 20 LFD... EXEC PROG1 Each logical unit number you use corresponds to a device requirement for your job. So, if you specify logical unit number 20 in one job step and logical unit number 21 in a following step, two printers must be available in order for your job’s execution to begin, even if one is sufficient. 2-2 7004 4623.000 Basic Concepts II JOB MYJOB If DVC 20 1/ LFD.. • 1/ EXEC PROG1 • Two printers must be avaiLable for this job to run. II DVC21 If LFD. -. If EXEC PROG2 I& Besides using logical unit numbers, disk devices can be assigned by specifying RES or RUN. These and other functions of the DVC statement are further discussed in Sections 3 and 4. Note: For 0776 printers, the CLASS=parameter should be used if a unique logical unit number is required. Volume Serial Numbers for Disk, Diskette, and Tape (VOL Statement) Volume serial numbers are used to uniquely identify disk packs, diskettes (format and data-set-label), and tape reels to the operating system. This number is written externally (generally on a gummed label) and internally (on the actual recording surface). Both numbers should match for identification purposes. The assignment of volume serial numbers takes place when the prep routines associated with disk, diskette, and tape are performed. See the System Service Programs (SSP) Operating Guide, UP-8841, for information about prep routines. When you specify a volume serial number in a VOL statement, job control checks to make sure that a tape reel, diskette, or disk pack with the matching volume serial number is mounted. If the wrong volume is mounted, the system notifies the operator. 7004 4623-000 2-3 Basic Concepts In this example II JOB MYJOB Device assigrnent for a disk fiLe II DVC 50 II VOL 12345A II LFD... Specifies any available disk device Specifies a disk pack with the assigned volume serial number of 12345A /1 EXEC PROG1 the disk volume whose serial number is 12345A must be mounted for job processing to continue. We’ll discuss other functions of the VOL statement in Sections 3 and 4. Notes: 1. OS/3 assumes that all volume serial numbers are unique. The mounting of two volumes with the same volume serial number at the same time yields unpredictable results. 2. OS/3 allows a maximum of 151 volumes to be in use by all active jobs. (The maximum number of volumes allowed for a single job is also 151.) File Identifiers (LBL Statement) While a volume serial number identifies one tape, disk, or diskette volume, a file identifier names (or identifies) a particular file on that volume. The file identifier is an alphanumeric name physically written on the recording surface of the tape, disk, or diskette (format and data-set-label). You specifSr a file identifier on the LBL job control statement. If you’re creating the file, the identifier you specify is assigned. If the file already exists, job control checks to see that the file identifier specified with the LBL statement matches one already recorded for a file on a particular volume. This ensures correct file use. C, 2.4 70044623.000 Basic Concepts If JOB MYJOB Device assignment set for a disk file /1 /1 /1 ii DVC 50 VOL 12345A LBL MYFILE LFD... If the fite,is being created, I4YFILE is the identifier assigned. If the file exists, MYFILE is the identifier job controL checks for. II EXEC PROG1 A file identifier specified on an LBL statement is required for any file on disk, diskette, or multifile tape volume. If a tape volume holds only one file, a file identif ier may be specified but isn’t required. As you’ll see in a later section on spoolin g card input, it is sometimes useful to specifSr an LBL statement (with a file identif ier) in the device assignment set for a card file that’s been spooled. The LBL statement has other functions that are covered in Sections 3 and 4. Note: The prep routine for data-set-label diskette automatically assigns a file identifier ofDATA unless you specify otherwise during the prep. Disk and Format-Label Diskette File Area (EXT Statement) Whenever you’re creating a disk or format-label diskette file, you allocat e space for that file in contiguous areas (on the recording surface) called extents. The amount of space as well as other characteristics of the file’s extent are specified using the EXT job control statement. The device assignment set for every disk or format -label diskette file you are creating must include an EXT statement. It is also required if you want to change certain extent specifications for a file that already exists. Using the EXT statement, space on disk or format-label diskette is allocated in terms of one of the following: • Number of cylinders You specify the number of cylinders needed for the file. • Absolute cylinder address You specify the number of cylinders needed for the file and you also specify the starting address of the file as an absolute cylinder address. 7004 4623.000 2-5 Basic Concepts • Number of tracks You specify the number of tracks needed for the file. • Absolute track address You specify the number of tracks needed for the file and you also specify the starting address of the file as an absolute track address. • Number of blocks (by cylinder) You specify the number and average length of the blocks needed for the file. Job control converts this specification to the number of cylinders so the actual allocation is by cylinder. • Number of blocks (by track) You specify the number and average length of the blocks needed for the file. Job control converts this specification to the number of tracks so the actual allocation is by track. You’ll learn more about file space allocation when we discuss the EXT statement in Sections 3 and 4. For now, it is enough to know that an EXT statement must be included in the device assignment set when you’re allocating space or making certain allocation changes for a disk or format-label diskette file. Device assignment set for a disk file. II II II /1 II II JOB MYJOB DVC 50 VOL 12345A LBL MYFILE EXT MI,C,,CYL,4 —p LFD.... This statement specifies four cylinders of contiguous space for a MIRAI4 (disk) file. II EXEC PROG1 /& Data-Set-Label Diskette File Area (EXT Statement) The prep routine for a data-set-label diskette automatically allocates the entire diskette for one file and assigns a file identifier of DATA unless you specify otherwise. If the space was already allocated by the prep routine, there is no need for you to include an EXT statement in your device assignment set. If, however, the space was not previously allocated, you must use the EXT statement to allocate the space yourself. Allocating the space yourself allows you to have control over how many files the diskette can contain. 2-6 7004 4623-000 cD Basic Concepts Space on data-set-label diskette must always be allocated by block and it must be contiguous. Data-set-label diskette files are always one-extent files. For information about the EXT statement for data-set-label diskette, see “Information about Data-SetLabel Diskette File Allocation” in Section 4. Logical File Names (LFD Statement) We’ve already talked about how you specify a file identifier (a name that’s physically recorded on the surface of a disk, tape, or diskette) on the LBL job control statement. There is another name, however, that is required for every file (not just disk, tape, and diskette) and must be included in every device assignment set. It is the logical file name: the name your program references the file by. You specifr it on the LFD (logical file definition) job control statement, which is always the last statement in any device assignment set. The name you specify logically (LFD) links the file (name) you reference in your program with the physical file (LBL) defined in your job stream’s device assignment set. The names that you use are: InBAL The name from the label field of the file definition macroinstruction. If: Then: 1 10 FILE1 CDIB 16 II /1 II II II DVC VOL LBL EXT LFD 50 12345A MYFILE MI,C,,CYL,4 FILE1 Device assignment set for a newLy allocated file referenced by the progran as FILE1 In COBOL The LFD field of the implementor name from the SELECT clause. If Then: 12 SELECT CDS ASSIGN TO CARDREADER-INFIL-F If DVC 30 II LFD INFIL Device assignment set for the card file (In basic and extended COBOL, the LFD name corresponds to the first eight characters of the file name from the SELECT clause. If an external name is specified, however, then use the external name instead.) 7004 4623-000 2-7 Basic Concepts • In FORTRAN The device number from the READ or WRITE statement, prefixed by FORT. If: Then: 7 10 /1 /1 Ii If READ(6, 10) DVC VOL LBL LFD 90 TAPEO1 PAYFIL FORT6 Device assignment set for a tape fite InRPGII The file name from the file description specification. If: FORM TYPE Then: — FILE TYPE ‘ If DVC 20 If LFD PRINT FILE DESIGNATION END OF FILE Device assignment set for a print fiLe SEOUENCE PAGE NO. FILE NAME LINE NO FILE FORMAT o 123 567 QLI. JJL PRII IT 1314151617181920 i - - BLOCK LENGTH 23 - The file name used for a printer file in programs supplied by Unisys (such as the compilers and the linkage editor) is a standard system file name, PRNTR. So, if you want the printed output from a compilation, for example, the LFD statement for the print file device assignment set is II LFD PRNTR. This logical file name applies only to programs supplied by Unisys. In ajob or job step that executes a user program, you must supply your own logical file names (for the printer plus any other files) on the LFD job control statement. When using any other Unisys routines (such as the data utility routines), specif the standard system file names shown in the coding examples in the corresponding publication. These and other applications of the LFD statement are discussed in Sections 3 and 4. C 2-8 7004 4623-000 Basic Concepts Device Assignment Set Placement and Duration There is no strict rule for the placement of a device assignment set in a job control stream: simply place the device assignment set somewhere between the JOB statement and the EXEC statement. 1/ JOB MYJOB other job control statements 1/ 1/ /1 II DVC VOL LFD LFD 50 12345 DSKFIL1 PAYROLL other job control statements II EXEC PROG1 I& ‘Where a multiple step job is concerned, just remember that a device assignment set specified in one job step is normally effective for that step as well as any that follow. Consider this example. f Job step 1 Ii JOB MYJOB /1 Ii 1/ Ii II II DVC LFD DVC VOL LBL LFD 20 PRTFIL 90 T00001 TAPE1 PAYRATE I Device assignment sets for a print file and a tape file. The assignments are effective for job steps 1, 2, and 3. 1/ EXEC PROG1 continued 7004 4623-000 2-9 Basic Concepts Job step 2 If DVC 50 II VOL 1234A /1 LBL DSKFIL1 II LFD PAYROL Device assignment set for a disk file. The assignment is effective for job steps 2 and 3. /1 EXEC PROG2 Job step 3 • II EXEC PROG3 • Any of the device assignments specified in job steps 1 and 2 are effective for job step 3. /& In the preceding example, PROG1 can reference only PRTFIL and PAYRATE. It cannot reference PAYROL. PROG2 and PROG3 can reference PRTFIL, PAYRATE, and PAYROL. Job Termination There are two ways in which a job can terminate: normally or abnormally. 1. Normal Termination This is initiated by the control stream, the program, or the workstation or system console operator. Generally, it occurs after the last job step, but it can also be caused by the operator using the CANCEL or STOP operator command, or by the program issuing a cancel instruction. If terminated by the CANCEL system command or program instruction, the entire job terminates immediately. This includes the currently executing job step plus all subsequent job steps (if any) in the job. The STOP operator command terminates a job when the job step currently executing is finished. 2. Abnormal Termination This is caused by program errors or by control stream errors (syntax order). If caused by program errors, you can get a main storage printout (dump), which can be used to debug your program, provided that you have placed an OPTION DUMP statement in the control stream prior to the job step that caused termination. The OPTION job control statement is covered in “Selecting Optional Features” in Section 6. If caused by a control stream error, a message explaining the error is displayed on the system console. 2-10 70044623-000 Basic Concepts In anticipation of program errors, you may use the ABNORM=label parameter of the EXEC statement. This parameter causes a skip forward in the job control stream so that the job finishes executing and doesn’t terminate abnormally. If, however, the operator issues a cancel instruction, the job terminates normally. All terminations result in the deallocation of the system facilities (peripheral devices, main storage, disk work areas, etc.) allocated to the job. Restarting a Job What if your job terminates abnormally specifically when your program is executing? If the program only processes a few records, you can rerun the job from the beginning without any great loss; but, if the program processes many records, rerunning the job increases processing time and cost. To help avoid this, 05/3 provides a restart facility that permits you to resume execution of your job from a particular job step or a checkpoint record. See “Restarting a Job” in Section 6 for more information. - Branching within a Control Stream When you write a program, you can set alternate paths for the program to take. Normally, program statements execute consecutively in the order of their appearance. However, it is often necessary to alter this normal sequence and skip forward to a different point in the program this is called branching. Similarly, alternate paths can be taken in job control streams. The SKIP and OPTION QUERY job control statements allow you to skip forward in the job control stream during your program’s execution to another job control statement. The ABNORM parameter of the EXEC job control statement allows you to skip forward in the job control stream if your program causes an abnormal termination. (See Section 6.) - You can also branch from one job control statement to another in a control stream by using run-time conditional job control statements (they’re called run-time statements because they are available and effective through the run symbiont). Run-time conditional job control statements are interpreted and acted upon while the run symbiont is scanning the control stream. They are not placed in the job’s $Y$RUN file; their actions are completed when the run processor has acted upon them. Only forward branches are allowed. The job control statements belonging to this category are GO, IF, and NOP. They are explained in “Run-Time Conditional Job Control Statements” in Section 7. 70044623-000 2-11 Basic Concepts Jobs and Main Storage After the supervisor is loaded into the system, the remaining main storage is available to job control, symbionts (like the run processor and the job scheduler), your jobs, shared code, and your programs. Naturally, the amount of available main storage varies, depending on the jobs, symbionts, and programs executing at the time. Job control assigns a portion of main storage to each job as the space becomes available. The amount of main storage assigned is that which is needed to execute the largest job step in the job. When ajob is completed, the space it occupied is returned to the system. Job Roll-Out/Roll-In In “Considering Jobs for Execution the Job Scheduler” in Section 1, we mentioned that the job scheduler considers jobs for execution by priority and the availability of main storage and peripheral devices. In general, if the necessary main storage and peripheral devices are not available, the job’s execution, regardless of its priority, cannot begin. A different situation exists if roll-out (ROLLOUT=YES) is configured at SYSGEN time. - With roll-out, high, normal, and low priority jobs are rolled out to disk to provide enough main storage for preemptive jobs to be executed. When the preemptive priority section of the job queue table is empty, the job scheduler rolls first the high, then the normal, and last the low priority jobs back into main storage for execution. Remember though, even if roll-out is configured, the peripheral devices needed for the preemptive job must also be available; otherwise, roll-out does not occur. Minimum and Maximum Main Storage By minimum main storage size we mean the amount needed to successfully execute the largest step of a job. The maximum size is the amount that can be used, if available, to improve or speed up job step execution. As you’ll see in Section 4, you can specifr the minimum and maximum main storage size on the JOB statement or on the OPTION statement. The total amount of main storage used by a job step also includes the size of the job prologue. The prologue contains information (control tables) needed to regulate your job. The size of the prologue, however, is automatically taken into consideration so you don’t have to include it in any main storage size that you specify. Just keep in mind that the job prologue is part of the true main storage requirement for a job. This is illustrated in Figure 2-1. C 2-12 70044623-000 - Basic Concepts JOB PREAMBLE TASK CONTROL BLOCKS JOB ACCOUNTING TABLE — JOB PROLOGUE LOCAL DATA AREA SHARED CODE TABLE DISK STORAGE EXTENT INFORMATION JOB REGION LENGTH SPOOL CONTROL TABLE AND BUFFERS PHASE LOAD TABLES SAT/CDM ACCELERATION CODE 1— 1— MINIMUM LENGTH JOB STEP LOAD MODULE PROGRAM AREA MAXIMUM LENGTH Figure 2-1. Job Region in Main Storage Dynamic Expansion of Main Storage Your job may require dynamic expansion of its initial main storage allocation to load software modules (data management modules, for example), or to accommodate other program modules called by your job. This capacity for dynamic expansion of the job region is called the DLOAI) facility. For more information about this facility, see “Defining Software Facilities Needed by Your Job” in Section 6. 70044623-000 . 2.13 C) C’ Section 3 Minimum Control Stream Requirements What Is a Minimum Control Stream? A minimum control stream consists of only those job control statements needed to properly direct the execution of a job. Let’s assume you want to execute a program that has been compiled, link edited, and stored in a library. This particular program does not use any input (cards, tape, disk, etc.) and the only output is directed to the printer. The purpose of the program is to print constants on adhesive-backed mailing labels, like this: NAME ADDRESS CITY STATE ZIP CODE Granted, this isn’t a widely used application, but it illustrates a bare minimum control stream. Constructing the Minimum Control Stream In order to run this program, we have to construct a control stream to tell the operating system what to do with it. Since the needs of the program are simple, we need very few job control statements. 70044623-000 3-1 Minimum Control Stream Requirements First, a JOB statement is needed to indicate the beginning of the job to the operating system. Every job entering the system must start with a JOB statement. Each job step does not need a JOB statement, only one for the job as a whole. Next, since there is a print output, a DVC statement is needed to assign a printer to the job. And finally, every peripheral device we use has a file associated with it; every file needs a file name. An LFD statement provides the file name. The DVC and LFD job control statements make up a basic device assignment set. Since the printer is the only peripheral device used by our program, no other device assignment sets are required. In fact, there are no other processing options needed for this program. We are now ready to initiate the execution of the job step (our entire job consists of only one job step). We need an EXEC statement for this. Now our program has all the job control statements that it needs to function. But, when it is finished, we have to tell the system that our control stream is finished. We need a /& job control statement. Briefly, we have indicated all the job control statements needed for this simple prOgram. They are: • JOB • DVC • LFD • EXEC • /& We will cover each of these job control statements in its proper sequence. We will show all the parameters available for these job control statements, but, at first, only those parameters that are required will be described, along with any parameters that are generated by default. The optional parameters will be introduced into the discussion ofjob control at the appropriate time. But, before we start our control stream, you should read the statement conventions in Appendix A. They explain how the job control statements are presented in text (how you can tell which parameters are optional, which are required, how a default option is shown, etc.) and how you code them. C., 3-2 70044623-000 Minimum Control Stream Requirements The Beginning of the Job The JOB job control statement is the first job control statement that you need. Its format is: Iltsyirbot) JOB jobname , P t,min)t,max)[ tasks max-time L’ E,print-option-tist]E,acc-no][,nXm] ]L , ACT LOG NOACT NOLOG NONE BOTH [NOHDR L As you can see, it has quite a number of parameters. You can specifr the name of the job, the priority, how much main storage is needed, the amount of tasks in ajob step, how long the job should take, special information for display on the system console, accounting information, spooling buffer size, and log information (where your accounting record is kept). The only parameter we are interested in right now is the jobname parameter, and any default parameters (shown by shading) that are generated. The jobname parameter does just what it implies: it names the job. It consists of one to eight alphanumeric characters. Do not hyphenate the job name if you plan to save the job. The save processor does not allow or recognize hyphens. For example, we assign the name POCO to the job. It’s coded as: II JOB POCO By default, the job has a normal scheduling priority (N) and one task (1). There is a special feature of the jobname parameter that helps you ensure that unique job names are always assigned you can use trailing ampersands (&) in the job name. You could, for example, code: - If JOB POCO&&&& When the stream is processed, the system replaces the ampersands with unique numbers. 7004 4623-000 3-3 Minimum Control Stream Requirements When would you use this feature? If you have ajob control stream (POCO for example) that is used frequently by different personnel perhaps even concurrently from workstations all the users could use POCO&&&& and be assured of having unique job names assigned. It is recommended that if you use this feature, you use at least three trailing ampersands. C - - You can override the parameters specified on the JOB control statement through selected features of the OPTION job control statement, which is explained in “Selecting Optional Featured t in Section 6. Identifying the Devices The next entry needed in the control stream is for the printer. The DVC job control statement is used to request the assignment of peripheral devices to a job. Its format is: //Esymbot] DVC fnnn[(n)] RES RUN , addr OPT IGNORE ALT 0 REQ[(n)] REAL The DVC job control statement specifies the logical unit number associated with a peripheral device type. It can also be used to assign alternate devices, or to specif5r that the job should be executed even if the requested devices are unavailable. Here, again, we are only interested in the required parameter specifring the logical unit number. There are no default parameters. The nnn is a decimal number indicating the logical unit number of the device. By looking at the following information (taken from Table A-i of the Job Control Programming Reference Manual, UP-9984) we see that the category for printers is in the range of 14-29. If we are willing to use any printer that is available, we use logical unit number 20 or 21. But, it just so happens that there also are a 0776 printer subsystem and a 9246 printer subsystem available in the system. Our program uses a special character that is only present on the 0776 printer, so we will use logical unit number 24. C. 3-4 7004 4623-000 Minimum Control Stream Requirements Logical Unit No. 20, 21 22, 23 24, 25 Device Type Code 04FF0000 04400000 04100000 Device Type and Features Any printer, no features specified 9246 printer, no features specified 0776 printer, no optional features You’ll notice that there are two other choices for the DVC job control statement: RES and RUN. They will be discussed and used in later examples. We can now add the DVC job control statement to our control stream as follows: 1/ JOB POCO // Dvc.24 Notes: 1. The (n)portion of the nnn parameter is used only when the logical unit number indicates a workstation device. 2. Logical unit numbers can be changed at system generation (SYBGEN) time to suit the needs of a particular installation. You must be aware of any changes because they could cause device assignment problems within your control stream, especially ifyou’re using JPROCS supplied by Unisys. Assigning a Logical File Name to the File Every device assignment set in the control stream ends with the LFD job control statement. This associates the file defined in the program with the file information in the control stream. Its format is: /ItsymboL] LFD ffilename l*fi1enI r r 1 i 11] L , EXTEND INIT PREP ID IGNORE The LFD job control statement specifies the file name of the file. It’s also used to reserve main storage for information about disk file extents, write over the information of the file, and add to the data already in the file. 70044623.000 3.5 Minimum Control Stream Requirements The filename parameter specifies the name of the file you are going to use, and must correspond to the name given to the file in the program. The file name for the LFD job control statement is determined in the following manner: • The basic assembly language (BAL) programmer uses the name in the label field of the file definition macroinstruction. • The COBOL programmer uses the external name from the SELECT entry in the environment division. (If the external name is omitted in COBOL 68, use the file name from the SELECT entry.) • The FORTRAN IV programmer uses the device number from the READ or WRITE statement, prefixed by FORT. • The FORTRAN27 programmer uses FO followed by the unit number unless a specific name was specified in the OPEN statement. • The RPG II programmer uses the file name from the file description specification. The filename parameter is normally one to eight alphanumeric characters, but if you are using a data management file, it has a maximum of seven characters. This is because data management allows only one to seven characters in the label field of the file defmition macroinstruction. If an asterisk is placed in front of the file name on the LFD job control statement, it means this is an input-only file; you cannot write on it. The operator should be notified of this so he can take appropriate action. For our control stream example, we’ll assume our program is a COBOL program. The file name for the printer in the FD entry is WRITEOUT. We can now add the LFD job control statement to our control stream. II JOB POCO II DVC 24 it. Executing the Program We have defined all the requirements of the program the operating system. Now we have to provide a job control statement to call the sorted program from a library and initiate execution. This is done with an EXEC job control statement. Before the program is actually loaded, any outstanding tape and disk mounting requests are completed. 3-6 70044623-000 C Minimum Control Stream Requirements The format of the EXEC job control statement is: /I[symbot] EXEC programname[ I [Library-name t,switch-priority]E,ABN0RM=tabeL] $Y$RUN L The EXEC job control statement identifies the name of the load module. It is also used to specify the library containing the load module, the task switching priority, and any action to be taken if the program causes an abnormal termination. Once more, we are only interested in the required parameter and any default parameters generated. The program-name parameter identifies the load module to be executed. Every program that is successfully compiled and link edited creates a load module. Every load module that is created and every routine supplied by Unisys must have a name. The LOADM linkage editor control statement assigns a name to a load module; the EXEC job control statement calls the load module by a program name. These names must agree. For example, you link edit your program with the module name TESTR on the LOADM linkage editor control statement. The linkage editor creates the load module with the name TESTR. When you want to execute this program, your EXEC job control statement uses this same name: TESTR. If, when you link edit your object module, you do not use a LOADM linkage editor control statement, the load module name, by default, is LNKLOD. Assume that this program is stored in a library from which it can be retrieved as many times as needed. When the program was link edited, the linkage editor was instructed to place the load module in a specific, permanent library; otherwise, it automatically would have been placed in the job’s $Y$RUN file, which is only a temporary file. Assume it is located in the system load library file ($Y$LOD), and the load module name is LABELS. Since $Y$LOD is the default parameter generated for the load library, we only need to specify the program name, which is the same as the load module name: LABELS. We can now add the EXEC job control statement to our control stream as follows: II JOB POCO 1/ DVC 24 1/ LFD WRITEOUT JLEX.EC;.iABEL By default, the lowest available task switching priority established at system generation time is used. 7004 4623-000 3.7 Minimum Control Stream Requirements Ending the Basic Control Stream So far, we have provided all the job control statements needed to construct a basic control stream: JOB, DVC, LFD, and EXEC. This control stream is all the system needs to execute our simple program. But, after the program executes, the system returns to job control to obtain the next job control statement. Because the job is finished, a /& job control statement is used to signal the end of the job. Its format is: /& This statement has no parameters, but it can have comments. These comments have no effect on the system; they only provide a means of annotation. The comments must be separated from the /& job control statement by at least one blank column. The statement conventions for coding more than one job control statement on a line (multistatement coding) are presented in Appendix A. The I& job control statement, however, must be the only job control statement on a line. Adding the /& job control statement, along with some comments, our control stream looks like this: 1/ If 1/ II JOB POCO DVC 24 LFD WRITEOUT EXEC LABELS Ending the Card Reader Operation We have signaled the system we are finished processing. Now, we have to terminate the card reader operation this informs the system that there are no more cards associated with the job. We do this with a FIN job control statement. Its format is: - //Esymbot] FIN There are no parameters. We can now add a FIN job control statement to our control stream, as in the following example: II II II II JOB POCO DVC 24 LFD WRITEOUT EXEC LABELS /& END-OF-LABEL-JOB /1 FIN C 3-8 70044623-000 Minimum Control Stream Requirements The FIN job control statement also signals the end of card input when merging job control statements with stored control streams, submitting data cards as input for a stored control stream, or storing a complete control stream. Note: Using the FINjob control statement is unnecessary when input is on data-setlabel diskette or in the input spool file. The Control Stream So Far A Review - We have defined everything the system needs to know about the job. It has been given a name, the system was instructed what load module to use, and the job has been assigned the peripheral device it needs. The program is ready for execution. This control stream represents only a minimum application. We have only scratched the surface of the capabilities of the OS/3 job control. Throughout the rest of this guide, we are going to build on this minimum control stream by adding and modifying job control statements. Let’s assume that the program with a load module name of LABELS was recompiled and link edited after it was modified to accept input from the card reader. This new input contains name and address information that will be printed on the adhesivebacked labels along with the constant information as shown in the following sample. NAME JOHN A. SMITH ADDRESS 143 S. 52ND. ST. CITY ZIP CODE 7004 4623-000 HOMETOWN STATE PA. 18908 3-9 Minimum Control Stream Requirements Adding Card Input Since the job will now accept card input, we must provide a device assignment set for the card reader. This means we have to insert a DVC and LFD job control statement for the card reader into the control stream. Once again, their formats are: //[syTnbot] DVC [nnn[(n)] RES RUN - //[syiot] IFO FfiLenne G G*fitenameF , addr [,HOSThost-id] OPT IGNORE ALT 0 REQ[(n)] REAL fnl[ Ij 181]! L L EXTEND PREP ID IGNORE The following section of Table A-i in the Job Control Programming Reference, UP-9984, indicates that the category for card readers is 30-35. LogicaL Unit No. Device Type Code 30, 31 32, 33 34, 35 08FF0000 08200000 08800000 Device Type and Features Any card reader subsystem, no features specified 0719 card reader, no features specified 0716 card reader, no features specified For this example, we will assume the system you’re using has only one card reader, an 0719 card reader. For a logical unit number, there are four alternatives. We can use 32 or 33, which assigns a 0719 card reader specifically, or, since the 0719 card reader is the only one we have, we can use 30 or 31, which allows us to use any available card reader. 3-10 70044623-000 Minimum Control Stream Requirements If the system had two card readers, both of a different type, and a particular card reader is needed, you must be more specific in your assignment. If it’s immaterial which card reader is used, you could assign the logical unit number for any card reader (30 or 31). A point to remember about logical unit numbers: if you don’t care about the specific device type, use the logical unit number that assigns any device within the category (20 and 21 for printer, 30 and 31 for card readers, etc.). In that way, if there is more than one type of device, you get the first one available. For instance, suppose you selected logical unit number 25 (Unisys 0776 Printer Subsystem) but there is also a 0770 printer connected to the system. The 0776 printer has 40,000 lines waiting to print, while the 0770 printer has a backlog of only 500 lines. By specifying only the 0776 printer, you must wait for the other 40,000 lines to finish printing. By specif’ing any printer, the output is sent to the first available printer. The logical unit number we are going to use for the card reader is 30. Note: When requesting the assignment of more than one device of the same type (two printers, for example), be sure you request the assignment of any specific devices you need before you request the assignment ofgeneral ones. This ensures that a specific device you may need (the 0770 printer, for example) will not be allocated for use as a general printer when it’s needed as a specific device. Now that we have a DVC job control statement for the card reader, we need a corresponding LFD job control statement. Since this program is written in COBOL, we check the SELECT entry in the COBOL program and find that the file name is CAROIN. This file name is coded in the LFD job control statement. We can now add the device assignment set for the card reader to the control stream. It can be placed anywhere in the control stream, with the following restrictions: • It must be before the EXEC job control statement. • It cannot be within embedded data. • It cannot be within the device assignment set (DVC through LFD sequence) for another device. 7004 4623-000 3-11 Minimum Control Stream Requirements Card Input and Embedded Data To accept data input from a card reader, we must inform the card reader in some way that it is data to be read. In many cases, this data is caused to be read at execution time by data management. In this kind of application, the data cards follow the II FIN card that caused the card reader to be turned off previously. All that is additionally needed is a /* card after the data signifying end of data. There are no other parameters required, and no comments are permitted in the comment area of the card. This /* statement is always required for any type data. Thus, to our control stream we can now add the data, followed by the 1* end-of-data statement, and run our job, which consists of the LABELS program. Basically, we are saying to the processor, run my job POCO which executes the program called LABELS my data is a card file after the FIN statement when you are ready to execute. This will print the name and address information, plus constants, as shown, on adhesive-backed labels that the operator has previously placed in his printer. The following example illustrates this control stream: - II JOB POCO // DVC 24 If LFD WRITEO(JT II DVC 30 II LFD CARDIN II EXEC LABELS /& II FIN data END-oF-LABEL-JOB cards 1* Note: You should be aware, however, that in the case of multiple files, if the first program in the series does not read all of its data cards (along with the 1* that signals end of data), the next program step will pick up where the previous one left off. Additionally, ifyou are programming in higher level languages, such as RPG, COBOL, or FORTRAN, you cannot read multiple card files in a single program without closing and reopening the files. Another way in which data cards may be accepted, and which informs the card reader that data is being input, is the embedded data method. This means that the data is embedded within the control stream itself. All it requires is a start-of-data (1$) job control statement immediately after the EXEC statement, followed by the data and the /* end-of-data. 1$ has no parameters, and may appear as the last job control statement on a muitistatement line. 3-12 70044623-000 Minimum Control Stream Requirements The advantage of this method is that the device assignment set is no longer required for the reader, since the control stream is already being read. Additionally, the data being read is instantly accessible, which is discussed later in Section 8. A disadvantage is that embedded data in a prefiled job control stream is harder to change than the data in a card file (which follows the II FIN job control statement). This is because the embedded data is actually a part of your control stream rather than a separate card file. Changing embedded data is discussed in “Substituting Embedded Data” and “Replacing Embedded Data Sets in Expanded Control Streams” in Section 6. An example of an embedded data control stream is: II 1/ II II Is JOB POCO DVC 24 LFD WRITEOUT EXEC LABELS data-cards 1* /& END-OF-LABEL-JOB If FIN You can use this method when you become familiar with the programming techniques needed by the language you’re using for example, a COBOL ACCEPT or FORTRAN READ instruction. In fact, programs supplied by Unisys (such as the COBOL compiler and the data utility routines) use this method. It entails the use of a supervisor macroinstruction in the program (if it’s assembler language; if it’s one of the other languages, there are similar instructions that are used). Again, if you decide to use the embedded data method, the changes to your job control stream are: - 1. Remove the device assignment set for the card reader; it’s not needed. 2. Place the data (1$, data cards, /*) after the EXEC job control statement. This is what’s known as embedded data. When you use the embedded data method, and you have an 0716 card reader supporting the 96-column card feature, your data file can use the full 96 characters. With data-set-label diskette, you can use up to 128 characters. But, even though your control statements also can be on 96-column cards and data-set-label diskette, only the first 72 columns (characters) can be used for job control statements. In addition to embedded data, there is a dummy data set. A dummy data set consists of only a 1$ and a /* This is used with some language JPROCS. More information about dummy data sets can be found in the language manuals (COBOL, FORTRAN, etc.). You can replace embedded data sets in translated, saved job control streams by using the DATA STEP job control statement. Refer to “Dynamic Skip Function from a Workstation” in Section 6 for more information. 70044623-000 3-13 Minimum Control Stream Requirements The Program Is Changed Another Device - So far, the program has been written to read name and address cards and print the information, plus constants, on adhesive-backed labels. The program has been refined once more. It is still going to print constants. However, the name and address file is now on magnetic tape, in ZIP Code® sequence. This tape was created by someone else’s job. We want to list only the name and addresses of certain ZIP Codes; therefore, we modif5r the program to accept a table from the card reader. This table contains only the ZIP Codes we want to print. The program instructs the system to compare the ZIP Codes from the table with the file on the magnetic tape and print the names and addresses that match the ZIP Code table. We have already provided the device assignment sets for the printer and the card reader. Even though the format of the card reader input is different (previously it was the name and address file, now it is the ZIP Code table), no changes are needed to the card reader device assignment set. It was a program change and does not affect the job control stream. The logical unit number is still 30 (DVC job control statement), and the file name in the program is still CARDIN (LFD job control statement). The only new item we have to provide in the control stream is a device assignment set for tape. What Is Needed to Use a Tape? We have already said that every peripheral device used needs the DVC and LFD job control statements. For readers, printers, and punches, this is all that is needed to complete the device assignment set. However, magnetic tapes have volume serial numbers, and, optionally, file identifiers. So, the device assignment set for a tape file could be either /1 DVC II VOL II LFD ... or II II If if DVC VOL LBL LFD... The first step is to provide a logical unit number and file name. ZIP Code is a registered trademark of the U. S. Postal Service. 3-14 70044623-000 Minimum Control Stream Requirements The Logical Unit Number and File Name for the Tape The range of logical unit number for magnetic tapes is 90-127. The name and address tape is a 9-track, phase-encoded tape. We must be specific. The logical unit number selected for the DVC job control statement is 100. This gives us any tape drive that can read a 9-track, phase-encoded tape; the tape unit transfer rate is immaterial. We can now add this partial device assignment set for tape to our control stream. If If II If II If Ii II JOB DVC LFD DVC LFD DVC POCO 24 WRITEOIJT 30 CARDIN 1 D NANADD EXEC LABELS /& END-OF-LABEL-JOB II FIN 1* These new DVC and LFD job control statements do not represent the entire device assignment set needed for tape. If we tried to run the job now, it would abort. Supplying a Volume Serial Number for the Tape Every tape file used in ajob must have a VOL job control statement in the device assignment set. This identifies the volume to be used. Its format is: /I[synibol) VOL F voLsri-1I Mcc N NMcc I voL sri-i I I L (NS) (NOV) L(PREP) 7004 4623-000 (NS) (NOV) (PREP) VOLSfl-2r L SCRATCH .c$> SCRATCH — VOLSflr 2 ICS) J(NS) I I 1(NOV) L [(PREP) VOLSfl-3r I I (NS) (NOV) (PREP) L (NS) (NOV) (PREP) SCRATCH 3-15 Minimum Control Stream Requirements The VOL job control statement supplies the volume serial number of the volume to be accessed by the job. However, a tape volume does not necessarily need a volume serial number, but it still must have a VOL job control statement. You can also use the VOL job control statement to: count the number of blocks in the file; specify the mode characteristics of the tape; request data management to write a volume serial number; inhibit the checking of volume serial numbers if they are not known; or, to indicate that the volume may also be used by someone else at the same time that you are using it (this only applies to disk). Again we are only interested in the required parameter. This parameter has several different options, but for this job, only the volume serial number is needed. The volsn-1 parameter is the 1- to 6-alphanumeric-character volume serial number of the first volume of the file. A file may span more than one volume. Perhaps the length of the file made it necessary to use three tapes (volumes) to hold the entire file. Since this file is on only one volume, only one volume serial number is needed. Assume it to be TAP111. We can now add the VOL job control statement to our control stream as follows: II JOB // DVC /1 LFD If DVC 1/ LFD Ii DVC I! II II 1/ II POCO 24 WRITEOUT 30 CARDIN 100 VOl. TAPIII LFD NAMADD EXEC LABELS f& END-OF-LABEL-JOB FIN data cards 1* This control stream could now be run, provided that the tape is unlabeled (no file identifier). OS/3 data management supports a maximum of 151 explicit volume names per file for disk, diskette, and tape files. C 3-16 7004 4623-000 Minimum Control Stream Requirements Labeled Tapes for File Identification Just as there can be one or more volumes in a file, there can also be one or more files in a volume. Suppose the tape volume contained five files. It would be necessary to have file identifiers on each particular file to access the proper file. Single-file tape volumes also can have file identifiers. This is done to ensure that the correct file is used. Even though the volume serial number is checked to see if the proper tape is mounted, it is possible that this tape does not have the proper file needed for the job. For example, someone could have inadvertently written on the tape because it did not have a file identifier to indicate that this tape already contains information to be saved. By using a file identifier, you indicate this is a saved tape. Had there been a file identifier on the tape, anyone trying to write on this tape would have been notified that this is a saved tape. The LBL job control statement is used to either check or create a file identifier. Its format is: //tsymbol] LBL. [fiLe-identifier 1 l’fiLe-intifier ‘ ifiLe-seriaL-number1[,exptrat1on-date) t 1VCHEcK f] L e.number} 1 [Icreation.date][ {fi1e.seuenc [ [ .[9eneration.number}1 ber} 1 {version.num The LBL job control statement identifies the file. It also can be used to: ensure that the correct members of a multivolume file are used; indicate the date the file can be deleted (by a SCR job control statement); indicate the date the file was created; indicate the position of the file in respect to the other files in a multifile tape vohime; and, specify the generation and version number of a tape file, thus ensuring the most current edition of the tape file is used. We only want to ensure that the proper file is on the tape volume, so we need only the required parameter. The file-identifier parameter is 1 to 17 alphanumeric characters for tape, card, and diskette files. It is 1 to 44 alphanumeric characters for a disk file unless that file is a scratch (temporary) file; then the file-identifier is 1 to 39 alphanumeric characters. If the file-identifier contains embedded blanks, it must be enclosed by single quotation marks. 70044623-000 3-17 Minimum Control Stream Requirements Assume that MASTERFILE is the file identifier assigned to this tape file when it was created. We can now add the LBL job control statement to the control stream as shown in the example. 1/ JOB POCO // DVC 24 1/ LFD WRITEOUT II DVC 3 /1 LFD CARDIN // DVC 100 /1 VOL TAP111 /1 B1. ?4ASTERFIL 1/ LFD NAMADD f/ EXEC LABELS f& END-OF-LABEL-JOB II FIN data cards 1* The default parameters generated indicate this is the only file on the volume (1), and it is the only edition of the file (1). Note: File identifiers prefixed by $SCR refer to job step temporary files; those prefixed by $JOB refer to job temporary files. Another Programming Change Another Device Assignment - The site manager has determined the label program doesn’t fulfill all the requirements for which it was intended. Once more, it must be changed. The name and address file was copied from the tape volume to a disk volume by using a Unisys data utility routine. Now, the input name and address file is on disk, the ZIP Code table is still input from the card reader, and the selected names and addresses, plus constants, are still printed on adhesive-backed labels. These selected names and addresses are now going to be saved and output to a file on a tape volume for a later processing application. Although there may be many programming changes involved, the control stream changes are minimal. C 3-18 70044623-000 Minimum Control Stream Requirements The device assignment set for the card reader, the printer, or the tape doesn’t need changing. Even though the tape was used previously as an input file, converting it to an output file is only going to involve changes in the program; it is not reflected in the control stream. After the tape was copied to disk,, the information it contained was deleted in another procedure. We can use this tape with a volume serial number of TAP111 as the output tape. We can also use the same logical unit number in the DVC job control statement. NAMADD is used as the file name for the output tape file in the program. This allows us to continue using NAMADD as the file name in the LFD job control statement. However, we are going to give this tape file a different file identifier. In the previous device assignment set for the tape it was MASTERFILE. We want to change it to reflect its purpose. It is no longer a master file for input; it is an output tape let’s call it OUTPUTTAPE. This requires a change to the file-identifier parameter of the LBL job control statement for the tape device assignment set. We do not need to change it, but to make the purpose and the name agree, we will. Changing the LBL job control statement makes our control stream look like this: - II JOB POCO II DVC 24 II LFD WRITEOIJT II DVC 30 II LFD CARDIN II DVC 100 II VOL TAP11l ZL1.]E..LO1JTPUTTAPE II LFD NAMADD II EXEC LABELS /& END0F-LABEL-JOB If FIN data-cards 1* We still must provide a device assignment set for the name and address file input from disk. 70044623-000 3-19 Minimum Control Stream Requirements The Device Assignment Set for a Disk or Format-Label Diskette The following chart lists the necessary job control statements for the basic disk and format-label diskette device assignment set. SYSRES or $Y$RUN File (Disk only*) Allocation Your Disk or FormatLabel Diskette Previously Allocated DVC VOL LBL LFD DVC LBL LFD DVC VOL LBL EXT LFD DVC LBL EXT LFD Not Allocated . *A format-label diskette volume cannot be used as your SYSRES volume or the volume containing the $Y$RUN file. In our case we have a disk file, the extent was allocated, and the file is not SYSRES or the job’s $Y$RUN file. So the following job control statements are needed: DVC, VOL, LBL, and LFD. The disk pack used for the name and address file fits on an 8494 Disk Subsystem. The logical unit number we are going to use for the DVC job control statement is 80. Within the program, the file name from the FD entry is DKNAME. This is the file name for our LFD job control statement. We need a VOL job control statement to indicate the volume serial number of the disk we are going to use. We need only the required parameter for the volume serial number. Assume the site manager had the name and address file copied to the disk with a volume serial number of DSKOO1. Since most disk volumes contain many files, each file needs a file identffier. When the site manager copied this file, he allocated it with a file identifier of DSKMASTFIL. We must specify this in an LBL job control statement. 3-20 7004 4623.000 Minimum Control Stream Requirements We now have all the information needed for the disk file. We can add the device assignment set for the disk input file to our control stream and run the job. JOB POCO DVC 24 LFD WRITEOUT DVC 30 // LFD CARDIN /1 DVC 100 Ii VOL TAP111 If LBL OIJTPUTTAPE Ii LFD NAMADD ii DVC 80 II VOL OSKOOI II LBL DSKMASTFIL It1LFi..: PK1.AM II EXEC LABELS /& II FIN data-cards /1 II II II END-OF-LABEL-JOB 1* The Device Assignment Set for Data-Set-Label Diskette The prep routine for data-set-label diskette automatically allocates the entire diskette for one file and assigns a file identifier of DATA (unless you specifSr otherwise). When this file is used, you must include a device assignment set in your job control stream that consists of the DVC, VOL, LBL, and LFD job control statements. For example: II II II II DVC VOL LBL LFD 130 DSLO1 DATA FILE01 You only include an EXT statement in the device assignment set (and specifSr your own identifier on the LBL statement) if the space wasn’t already allocated during the diskette prep routine. See “Information about Data-Set-Label Diskette File Allocation” in Section 4 for information about the EXT statement. The Device Assignment Set for a Workstation The DVC and LFD job control statements are required for a basic workstation device assignment set. The UID, USE SFS, USE DP, and USE MENU statements are included under certain circumstances. 70044623-000 3-21 Minimum Control Stream Requirements The UID Job Control Statement The UID job control statement may be used as part of the device assignment set for a workstation when you want to ensure that specific workstations, identified by user-id or device address, are automatically connected to a job. This is done before a job’s execution begins (if the workstation has not already been connected via the CONNECT command). Its format is: //[synoL] UID user-id-i (addr-i) user- Id- i(addr-1) [..., L I [user-id-255 (addr-255) user- id-255(addr-255) A maximum of 255 workstations may be specified. You can specify $Y$MAS as a user-id to assign the job’s master workstation to a job. The user-id parameter is one to six alphanumeric characters in length. A device assignment set that assigns the workstation being used by user-id (JONES1) could look like this: • ii DVC 200 Ii UID JONES1 ii LFD WKSTN Assigning workstations is discussed in more detail in “Specifying Multiple Workstations” in Section 4. The USE Job Control Statement If you are preparing a control stream for a program that uses screen format services, menu services, or the dialog processor, you must include a USE job control statement as part of your workstation device assignment set. Three different forms of the USE statement make it possible for you to specify which workstation service you want. These are as follows: /1 USE SFS... Ii USE MENU... If USE DP... (for screen format services) (for menu services) (for dialog processing) Each statement and its accompanying parameters is discussed further in Section 6 in “The USE Statement for Screen Format Services”, “The USE Statement for Menu Services”, and “The USE Statement for Dialog Processing”, respectively. C 3-22 7004 4623-000 Minimum Control Stream Requirements Job Step Temporary and Job Temporary Files To satisfSr the needs of the software components for disk work areas, files lasting for a job step and for the length of the job are provided. These files are deleted at the end of the job step or the end of the job. While these files are primarily used by the software components, the ability to allocate and use temporary files is also available to you. Basically, you allocate job step temporary and job temporary files the same way you’d allocate any disk file. The only difference is you must prefix your file identifier with $SCR for a job step temporary file and $JOB for a job temporary file. For example, to allocate ajob step temporary file, you could include the following device assignment set in your job control stream: II II If Ii /1 DVC VOL LBL EXT LFD 50 D12345 $SCRWORK1 MI,,,CYL,2 WORKFIL When a temporary work file ($SCR, $JOB) is allocated, the file label is modified by job control to allow concurrent jobs using the same file identifiers to access the proper work file. Every job in the system is assigned a unique job number. The label $SCR1 in JCL is allocated as $SCRnnnnnl, where nnnnn is the job number. Job step temporary files are automatically deleted at the end of the job step, while job temporary files are automatically deleted at the end of the job. If the system is reinitialized in the middle of your job, job control automatically scratches job temporary files and job step temporary files when it reallocates them. See “Setting Up Temporary Work Files” in Section 5 for information about using JPROCS to allocate job step temporary and job temporary files. Basic Job Control Statements This section has covered the job control statements needed to run most jobs. In the following section, we are goiPg to use the basic job control statements and add the optional parameters, explaining how each parameter affects the performance of the job. 70044623-000 3-23 0 0 Section 4 Getting the Most Out of the Basic Job Control Statements Optional Parameters Can Improve Job Performance So far, in our discussions of basic job control statements, we’ve concentrated on the required parameters. A great deal of work can be accomplished using just these parameters. Sometimes, however, required parameters won’t provide enough information. In other instances, the ability to provide more information to the system will speed up job execution. Additional information about a job and its peripheral devices is supplied via the optional parameters that are part of the basic job control statements. This section describes these parameters and shows how they are used. Improving Your Control of the Job The JOB control statement was used to give a name to the job. It is used also to specif5r the following: a selection priority; the main storage size for the job; how many tasks are in any one job step; how long the job should take; a list of the control streams on the operator’s system console for debugging purposes; and spooling buffer sizes. Once again, its format is: //[symbot) JOB jobname , P [,min][,max][ max-time tasks JL L’ [,print-option-List)E,acc-no][,nXm] 70044623-000 , ACT LOG NOACT NOLOG NONE BOTH [NOHDR L. 4-1 Getting the Most Out of the Basic Job Control Statements As you can see, some optional parameters generate default values when they are omitted. In the previous discussion of the JOB control statement, only the required parameter -jobname was coded. By so doing, we indicated that, by default, the job is to have normal priority (N) and there is only one task (1). This points up the fact that when only the required parameters are specified, you are, in many cases, providing more information about the job than is contained in the required parameters. The default values were selected because they conform to the most frequently used programming practices. This allows you to code as short a control statement as possible. The less there is to code, the less chance there is of making a coding error. - Note: The OPTIONjob control statement can be used to override individual parameters of the JOB control statement. Refer to “Selecting Optional Features” in Section 6 for more information. A Selection Priority for the Job Jobs are selected for execution on a priority basis. The second parameter on the JOB control statement specifies the priority. There are four priorities: low (L), normal (N), high (H), and preemptive (P). Remember our discussion on the use of priorities in Section 1, where we outlined how the priority is used by the system for selecting jobs and what each priority means? Most jobs are normal priority, which is by default, the parameter generated. If you need another priority, you have to specify it. It so happens that the label job named POCO is needed in a hurry, so the system administrator allowed you to assign high priority. Added to the existing JOB control statement, it would be coded as: /1 JOB POCO,H. Main Storage Needs When the load module named on the 1/EXECUTE statement is in a load library on a mounted disk volume, you don’t have to indicate the minimum amount of main storage to execute the load module. If the disk volume containing the load module is not already mounted, you must indicate the minimum amount of main storage needed to execute the module. The mm parameter does this. The minimum main storage size is specified in decimal or hexadecimal. The smallest amount that can be specified is 8K decimal bytes (2000 in hexadecimal). The area used by the job prologue is not included in this amount. C 42 70044623-000 Getting the Most Out of the Basic Job Control Statements Assume the label program needs approximately 12K (12,288) decimal bytes (3000 in hexadecimal) and that it’s in a load library on your own volume. The JOB control statement would now be: If JOB POCO,H,3000 or II JOB POCO,H,X’3000’ You can also specify the minimum main storage size in decimal. This is done by coding D’number’ for the mm parameter, as illustrated in the following JOB control statement: If JOB POCO,H,D’12288’ For the sake of illustrating the omission of positional parameters, this JOB control statement is coded as follows when the priority is omitted (it would be assigned the normal priority, by default, by the system): II JOB PoCo,,3ØØ See “Coding Conventions” in Appendix A for information about coding numbers in job control statements. Note: Ifa job consists of multiple job steps, specify only the minimum main storage size needed by the largest load module. Consider the possibility that you may be running a 3-job-step job, consisting of perhaps a COBOL compile, followed by a link edit, and then the execution of the generated load module. 05/3 knows how much main storage to allocate for both the COBOL compiler and the linkage editor, but there is no way OS/3 can know how much is required for the execution of your program, since it is not generated until after all the job control has been interpreted. If yeur generated load module does not use more main storage than the COBOL compiler (which is larger than the linkage editor, thus the largest known job step), then your load module will have sufficient main storage allocated. On the other hand, if your load module is larger than the COBOL compiler, not enough main storage will be reserved. More Main Storage to Speed Up the Job In addition to specifying the minimum main storage, you can also request additional main storage. This is an amount that can be used, but is not required, to speed up job execution. However, the program must be structured to take advantage of the additional main storage; for example, a segmented COBOL program. Some of the routines supplied by Unisys that use extra main storage in this manner are sortJmerge, linkage editor, and the language translators. Additional memory may also be advisable when running large assembly programs using many tags. As the minimum main storage size is specified in decimal or hexadecimal, so is the maximum; it is the fourth parameter (max) shown in the format. 7004 4623-000 4.3 Getting the Most Out of the Basic Job Control Statements We’ll asswne that the label program was structured to use 41K decimal bytes (A028 hexadecimal) of main storage, if it is available; also, that it uses the high scheduling priority and needs at least 12K decimal bytes (3000 hexadecimal). Added to our JOB control statement, it would be coded as follows: II JOB POCO,H,3000,A028 You can also code X’A028’ to represent the maximum main storage size in hexadecimal. You can specif5r the maximum main storage size in decimal by coding D’number’ for the max parameter (e.g., D’41 000’ instead of A028 or X’A028’). If we omitted the scheduling priority (it would default to normal) and the minimum main storage size, it would be coded as follows: II JOB POCO,,,A028 Nate: If either the mm or the max parameter is omitted, the value specified for one is used for the other. If both are omitted, and the load module is not located in $Y$LOD (on SYSRES) or in an alternate load library on either SYSRES or the volume containing the job’s $Y$R UN file, job control automatically allocates BK decimal bytes of main storage (2000 in hexadecimal). Ifyou have requested ajob dump through the OPTION statement (JOBDUMP), and you have not specified mm or max on the JOB statement, job control nearly doubles the amount of main storage that is automatically allocated. Ifyou specify mm or max and intend to request ajob dump, specify at least 14K decimal bytes (3500 in hexadecimal). Multitasking Specification If a program is written in BAL, you can create multiple tasks within it by using the task parameter. This is called multitasking. So far, we have been saying that job POCO is written in COBOL. For this example, assume that it is written in BAL, and that we are going to allow for 18 tasks to be active. The job still needs 12K decimal bytes to execute, but it can use 41K decimal bytes, and has a high scheduling priority. Adding the multitasking specification would make our JOB control statement look like this: 1/ JOB POCO,H,3000,A028,18 44 7004 4623.000 Getting the Most Out of the Basic Job Control Statements Each task specified requires 256 bytes in the job prologue. The maximum number of tasks you can have within a job is limited by the maximum size of the prologue (65535 bytes). If we omit the task parameter, job control assumes 1 by default. Note: There are other tables which require prologue space and their size varies depending, for example, on the number offiles and spool buffers declared through job control. Ifyou exceed the prologue size (you receive an R289 message and the job is not scheduled), you can reduce the number of tasks, files, or spool buffers specified. The Processing Time for the Job After the same job has run several times, you probably know how long it takes to execute. Should it run longer, it may mean something is wrong perhaps there is a “bug” that has never been encountered before. Rather than waste processing time, you can set a processing time limit using the max-time parameter. If the job executes beyond this time limit, a message is sent to the operator, who can either cancel the job or extend the time limit by any increment. If you specifSr max-time, you should tell the operator what action to take if the specified processing time is exceeded. - The max-time limit is specified in minutes. It refers to elapsed wall-clock time or to elapsed CPU time, depending upon how your supervisor is configured. If you want to suppress the max-time function completely for a particular job, you can specifr SUP in the max-time parameter, rather than a number. The system will adjust the max-time value to allow for the following conditions: • Checkpointfrestart • PAUSE job control statements • SET CLOCK commands • Roll-in/roll-out If you omit max-time, the time limit set at system generation is used as the default value. The max-time parameter is supported only on supervisors configured with NORMAL or MAX timer services. If a timer service is not specified at system generation, max-time specifications are ignored. Suppose you know that the job POCO should take no more than 15 minutes to run. Added to the other parameters of the JOB statement, the max-time parameter is coded as follows: II JOB POCO,H,3000,A028,18,15 70044623-000 4-5 Getting the Most Out of the Basic Job Control Statements C Debugging the Control Stream With the print-option-list parameter, you can control the printing ofjob control statements and JPROC listing by specifying one or more available options. In a spooling system, statements are printed (without passwords) in the job log; otherwise, they are displayed on the system console. This gives a graphic display or printout of the control stream for debugging purposes. For example, if a particular control stream is run for the very first time and there are syntax errors in the coding, the system will generate an error message telling you so. If you have used one of the debugging list options, you receive a listing of your control stream. The options for this parameter are: B Lists job control statements with symbol substitution. This is the default in a spooling system. D Lists job control statements (as they’re read in by the run processor) without any symbol substitution P Lists completed job control statements, which are generated by a procedure call statement in the control stream, showing the values assigned in the procedure definition statements E Lists any data contained in the control stream S Lists all the job control statements skipped as a result of an IF or GO job control statement A Combines all the options W Suppresses the display ofjob control warning errors on the console or workstation but not on the job log N None of the options are in effect (the default in a nonspooling system). C You may specify more than one option on a JOB control statement. However, if more than one option is specified, the parameter group must be enclosed in parentheses. Each option must be separated by a comma and can be specified in any order. For example, (S,P,E) or (P,E,S); when only one option is specified, no parentheses are needed. When the D, P, E, or S options are chosen (separately or in combination) you get a listing of your basic job control statements with symbol substitution even if B is not specified. C 4-6 7004 4623-000 Getting the Most Out of the Basic Job Control Statements Let’s assume this is the first time we are running job POCO, and we want to list the basic job control statements with symbol substitution, the job control statements generated by a procedure call, and the data. These are options B, P, and E, but since the option B is in effect when either P or E is chosen, you don’t have to specif5r it. Added to the other parameters of our JOB control statement, it would be coded as either: ii JOB POCO,H,3000,A028,18,15,.(P,E) or P) 1 1/ JOB POCO,H,3000,A028,18,15,(E Job Accounting and Spool Buffers Use the ace-no parameter to provide the account number that has been assigned to you at your installation. This 1- to 4-alphanumeric-character parameter creates an entry in the job preamble for this account number, containing the total elapsed wall clock time. Wall clock time can be defined as the point in time when ajob is initiated for execution, up to the time when the job terminates. Therefore, any time used by spooi input and spool output is not included. This parameter may or may not be required, depending on the accounting procedures used at your installation. Suppose the account number assigned to you is AOO1. Adding this information would make the existing JOB control statement appear as: ii JOB POCO,H,3øøøAø28,18,15,(E,B),AøØ1 The n.Xm parameter sets up buffers for the file. This buffer holds data from the time it first becomes available until the time it’s needed for processing. Thus, the central processor does not have to wait as long for data. The job log and any spooled files that don’t have their own buffers can share these buffers. When coded, the n is the number of buffers, Xis a constant, and the m is the number of (256-byte) blocks. Whenever nXm is omitted, a single 256-byte buffer (1X1) is reserved if only the job log is sharing the buffer with your spooi files. If other spool files are also sharing the buffer, two buffers of 512 bytes each (2X2) are allocated for a total of 1024 bytes. For example, if you wanted to allocate two buffers of 2048 bytes total, you would code: H,3000,A028,18,15,(E POCO B ),AGø1,2X4 II JOB 1 The only values accepted for m are 1, 2, 4, 8, 16, and 32. Numbers larger than 32 default to 32. Numbers not in the acceptable range are changed to the lower acceptable constant (e.g., 6 is changed to 4). 70044623.000 4-7 Getting the Most Out of the Basic Job Control Statements Printing the Job Log File and Page Headers The job log file contains the job accounting records, dumps created as a result of an OPTION job control statement with the DUMP parameter, and a log, or list, of messages and job control statements that were displayed on the system console. You can selectively print this job log file with your job, by using one of the following parameter choices of the JOB control statement: ACT LOG NOACT NOLOG NONE BOTH The ACT parameter forces the printing of accounting records, regardless of the system options in effect. LOG forces the printing ofjob log records, regardless of the system options in effect. The NOACT parameter, when used, suppresses the printing of accounting records. The NOLOG parameter means do not print the log (which also contains dumps generated by an OPTION DUMP job control statement). If you code the NONE parameter, both the log and accounting records aren’t printed. The BOTH parameter allows both the log and accounting records to print. If you don’t specify one of these parameters, the system options in effect are used. For example, if you want only the accounting information to print (no log records NOLOG), you would code: - II JOB POCO,H,3øee,Aø28,18,15,(E,B),AØs1,2X4,NCG Cancel and snapshot dumps are never suppressed. If you’re running in a nonspooling environment, this parameter is ignored. At the beginning of the job log and accounting record printout, a page header, which consists of several lines of asterisks, is printed. This can be suppressed by coding the NOHDR parameter on the job control statement; by default, HDR is generated. Coded, it would be: II JOB POCO,H,3ø0ø,Aø28,18,15,(E,B),Aøø1,2X4,NOLOG,NOjpR This parameter is ignored if you’re not spooling. Ajob log report program is also available that will provide you with a job accounting report based on the contents of the log file. For more information about the job log report program, refer to the System Service Programs (SSP) Operating Guide, UP-8841. 4.8 7004 4623-000 Getting the Most Out of the Basic Job Control Statements Identifying the Peripheral Devices a Little Further The DVC job control statement associates a physical device type, specified by a logical unit number, with your job. It can also be used to: assign multiple devices, in a serial manner, during ajob step; provide the physical address of the unit for using a specific device; or (in a DDP environment), indicate that a disk file is remotely located. Here, again, is its format: I/[symbot] DVC nnn[(n)] RES RUN , addr OPT IGNORE ALT E,HOST=host-idJ 0 REQ[(n)] REAL Refer to this format when each new parameter is introduced. Note: A particularjob cannot mix RBP destinations with auxiliary printers or DDP destinations. Using Multiple Devices, SYSRES, or the Job’s $Y$RUN File The first parameter has three choices: nnn, RES, or RUN. (Remember, the (n) portion of nnn is only used when assigning workstations.) We have already explained how to use nnn to specifr a logical unit number (see “Identifying the Devices” in Section 3). However, if you want to use more than one print, punch, or card file in a job, you should assign a different logical unit number to each file because the run processor flags multiple occurrences of the same logical unit number in the same job step. If your system contains only 0776 printers, for example, you can use the logical unit numbers 20, 21, 24, and 25. Sometimes, in a spooling environment, you may want to assign more than four virtual printers or punàhes. To do this, you must use the EQU statement (see “Equating Logical Unit Numbers to Device Type Codes” in Section 6) to equate additional logical unit numbers to your devices. You can use any logical unit number that is not already in your system. The EQU statement is placed just before the device assignment set. To get an 0776 printer when you have already used the logical unit numbers 20,21, 24, and 25, you might use the logical unit number 10, as follows: ii EQU 10,0410 II DVC 10 70044623-000 4-9 Getting the Most Out of the Basic Job Control Statements The number used for the type parameter of the EQU statement, 0410, is listed in Table A-i of the Job Control Programming Reference Manual, UP-9984, as the device type code for the 0776 printer. Note: The maximum number of unique devices allowed in ajob is 255. The maximum number of unit record devices (e.g., card readers, data-set-label diskettes, printers) allowed in one job is 42. You don’t have to supply a logical unit number for files in SYSRES or the volume containing the job’s $Y$RUN file. Use RES to indicate that the file is on the SYSRES volume, or RUN to indicate that the file is on the volume containing the job’s $Y$RUN file. Whenever RES or RUN is used, you can omit the VOL job control statement in the device assignment set. The system differentiates between which volume is the SYSRES volume and which volume contains the job’s $Y$RUN file. RES or RUN can only be used for disk files. In our control stream, we used this device assignment set for the name and address disk input file as follows: 1/ 1/ 1/ 1/ DVC VOL LBL LFD 60 DSKOO1 DSKMASTFTL DKNAME If, instead of using the disk with a volume serial number of DSKOO1, the site manager puts the name and address file on the SYSRES volume, still using the file identifier of DSKMASTFIL, and assuming the file name in the program is still DKNAME, then the device assignment set is: II DVC Ri:: 1/ LBL DSKMASTFIL 1/ LFD DKNAME The VOL job control statement is omitted because the file is on SYSRES. Specifying Multiple Workstations Suppose you want to access a workstation file from more than one workstation. The (n) portion of the DVC statement’s nnn parameter allows you to associate up to 255 workstations of the type and characteristics specified by (nnn) with one file. Consider the following example: /1 DVC 200(4) /1 LFDWKSTFILE C 4-10 7004 4623-000 Getting the Most Out of the Basic Job Control Statements When the DVC statement is specified like this, up to four workstations can be logged on and then optionally connected (using the workstation CONNECT command) to the same job. These workstations access WKSTFILE. If all four workstations must be connected for the job to begin execution, use the REQ parameter of II DVC, like this: 1/ DVC 200(4),REQ The UID statement is used when you want specific required workstations automatically connected to the job. The REQ parameter and the UID job control statement are discussed further in “Ensuring that Workstations are Connected to a Job” later in the section. More Control over Peripheral Devices The format shows there are eight possible choices for the second parameter of the DVC job control statement: addr, OPT, IGNORE, ALT, I, 0, REQ, and REAL. They are explained in the following paragraphs, except for I and 0, which are explained when we discuss spooling diskette files. Refer to “Spooling Input Card Data” in Section 6 for more information. Assigning Devices by Physical Address and Assigning Real Devices Every device has a physical address associated with it. This is a hexadecimal number representing the channel number, control unit address, and device number. It is assigned by a Unisys customer service engineer. You can specify it by using the addr parameter of the DVC job control statement. It is unlikely you will need to use the addr parameter because the system can best assign devices, since it is aware of the requirements of all jobs being run. Your job may have special needs, however. Suppose you are running in a spooling environment. You have a large job where the format of the printed output is very important. You want to bypass spooling so that you can check your printed output immediately and stop the job, if necessary, to correct the format. Since it is a large job, you do not want it to go first to a spool file and then print if there are formatting errors. You would specify the physical address of a real (rather than a virtual) printer, like this: II DVC 20,160 70044623.000 4-11 Getting the Most Out of the Basic Job Control Statements You may assign a real device and bypass spooling without specifring its physical address if you use the REAL parameter. The following statement, for example, allows you to request any real printer: /1 DVC 20,REAL If you use the addr parameter to request a specific tape or disk device, b sure the volume you want is not mounted on another unit. The flUID job control statement can be used to assign workstations by physical address. Refer to “Ensuring that Workstations are Connected to a Job” later in this section for more information. Is This Device Needed for This Particular Run? Sometimes, all the peripheral devices normally used by the job are not absolutely needed. You may have a case where a job normally produces print and tape output. Your system administrator needs the print output in a hurry, but is not worried about the tape output at this time. If necessary, the job can be rescheduled to produce the tape output. Our control stream has device assignment sets for tape and print files. In the DVC job control statement of the device assignment set for the tape file, we can use the OPT parameter. This indicates that the peripheral device is optional; it is not essential to the running of the job. If it is not available at the time the job is put into execution, all references to this device are bypassed. Added to our DVC job control statement for the tape output file, it would be coded as follows: /1 DVC 1øø,OP1 Different Volumes on the Same Device Within a job step, job control normally allocates one device for each logical unit number specified in the control stream. You might, however, have several different volumes to be processed serially within the same job step. This could require several different devices and your job would not be run until all the devices are free. You can suppress job control’s check for one volume per logical unit number within a single job step and reuse the same device serially by specifying IGNORE on the DVC statement. Since IGNORE reduces the number of peripheral devices ajob needs, it increases the chances of your job being run sooner. If the first occurrence of a logical unit number does not specifr IGNORE in the DVC statement, all subsequent references to that logical unit number must have IGNORE specified in the DVC statements. If you use the IGNORE parameter, processing for the first volume must be completed before the second volume is needed, and so forth. 4-12 7004 4623000 Getting the Most Out of the Basic Job Control Statements A typical application for the IGNORE parameter might be a program that takes information from a tape file, updates it with information from a card file, and creates a new tape. But ajob is scheduled that lasts most of the day, and it uses all but one of the installations’s tape drives. Since you need two tape drives, you would have to wait until that job was finished. However, you wrote the program so that it reads the input tape file completely, updates the information, and then writes it out to a new tape. Since the processing of the tape volume containing the input file is finished before the program creates the new tape file, you can use the same device by using the IGNORE parameter of the DVC job control statement in the device assignment set for the next file to be processed (the output file, in this case). The IGNORE parameter tells the system to disregard the fact that there already has been a device assignment set for this logical number in this job step. Suppose the input file is on a tape with a volume serial number of TAP111, a file identifier of FIRST, and the file name for the input file is MASTIN. The output file will be on a tape volume with a volume serial number of TAP222, have a file identifier of SECOND, and a file name of MASTOUT. The logical unit number we are going to use is 101. The device assignment sets for the input and output files would be: If If /1 If Ii If 1/ II DVC VOL LBL LFD DVC VOL LBL LFD 101 TAP111 FIRST MASTIN 101 IGNORE TAP222 SECOND MASTOUT When you use this feature ofjob control, make sure you inform the operator of the tape mounting sequence. Users of the Unisys sortJmerge routine will find the IGNORE parameter useful on tape sort applications that use tape volumes as input, work areas, and output. When a job consists of more than one job step, the system assumes that the first device assignment set for a logical unit number will be used in subsequent job steps until a new device assignment set for the same logical unit number occurs. For instance, if you wanted to use the tape file with a volume serial number of TAP222 in the next job step, you would have to specify the following device assignment set at the beginning of the new job step: /1 /1 If II 70044623-000 DVC VOL LBL LFD 101 TAP222 SECOND xxxx (this depends on your program) 4-13 Getting the Most Out of the Basic Job Control Statements Otherwise, the system assumes the tape with a volume serial number of TAP111 is to be used. Multiple Volumes in, a File? Use Alternate Devices to Decrease Operator Setup Time The file is large in fact, so large it needs four tape volumes to hold it. When the program uses four tape volumes, the operator can mount them, one at a time, on the device associated with the logical unit number on the DVC job control statement. When a volume is processed, the operator removes it from the device and mounts the next volume on the device. Meanwhile, processing time is wasted while the system waits for the new volume to be mounted. The operator must do this for every volume of the file. - One way of avoiding this is to use the ALT parameter on the DVC statement. This allows you to.alternate the same logical unit number between two devices, provided that two devices of the same type are available. One device uses the logical unit number while the first volume is being used, then the logical unit number switches to the other device for the next volume. After the second volume is finished, and if there are any more volumes in the file, the logical unit number is switched back to the first device, and so on, until all volumes are used. In this way, the operator can mount two tape volumes, on two different physical devices associated with a logical unit number, in their proper sequence. When the first volume is finished, the system switches to the device containing the second volume. Meanwhile, the operator can unload the first volume and mount the third volume on the device. In this way, no time is wasted because of setup time.. All alternate devices must be of the same type. This is especially helpful when small tape reels are used. Note that alternating is restricted to the boundaries of one job step, and that if only one device is available, a job will execute with only one device (even though ALT is specified). The ALT parameter of the DVC job control statement doesn’t work correctly if it is used more than once in ajobstream. A separate drive is allocated for each ALT, and if there are insufficient drives to accommodate all of the ALTs, only one drive is allocated even if two drives are available. IftheALTfunction is needed more than once in a jobstream, the following job control can be used: II DVC 90 1/ VOL A If DVC 91 If VOL B Assume ajob has four tape volumes, using logical unit number 100. You can switch between the two physical devices associated with logical unit number 100 by coding the DVC job control statement as follows: II DVC 100,J 444 7004 4623.000 Getting the Most Out o the Basic Job Control Statements Of course, the VOL job control statement must be modified to indicate the volume serial numbers of the four different tape volumes. We’ll discuss the use of optional parameters for the VOL job control statement later. Briefly, the following example is how multiple volume serial numbers are coded. 1/ DVC 100,ALT /1 VOL T11111,T22222,T33333,T44444 To ensure that alternation occurs between devices, you may explicitly declare two devices in your job control stream. This means you’ll have two DVC statements, each specifying a different logical unit number. Consider the following example: II 1/ 1/ II DVC VOL DVC VOL 100 T11111,T33333 101 T22222,T44444 In this case, the operator can always alternate between the two devices specified by the logical unit numbers 100 and 101, until all volumes are used. Users of the sortlmerge routine will find it helpful to alternate when sorting many tapes with the same label on a master tape. Ensuring that Workstations Are Connected to a Job You can use the REQ 1(n)] parameter of the DVC statement or the UID job control statement when you want to ensure that workstations are connected to a job. REQ tells the system that the workstations you’ve specified through the nnn[(n)] parameter of the II DVC statement are required and must be connected (using the workstation CONNECT command) for the job to begin execution. You can further tailor the DVC statement by specifying that only a certain number of the workstations must be connected before the job is executed. You do this with the (n) portion of the REQ parameter. If you prepare your statement like this: /1 DVC 200(8),REQ(1) it tells the system that eight workstations can be connected to the job and that one of the eight is required and must be connected for the job’s execution to begin. Note8: 1. 7004 4623.OOb The (n) portion of the nnn parameter and the REQ>(nXI parameter are used to assign workstations only. Up to 255 workstations can be assigned to a single workstation file. 4-15 Getting the Most Out of the Basic Job Control Statements 2. The nnn parameter of / I DVC is used differently for workstations than for other devices. Ifyou specify the logical unit number 200 (any workstations) and tailor the specification by using the (n)portion of the nnn and REQ parameters, multiple workstations (of any type) are assigned to the job. Recall from “The UID Job Control Statement” in Section 3 that the UID statement is used if you want specific workstations connected to ajob automatically. This is done before the job’s execution begins (if the workstations specified have not already been connected using a CONNECT command). You identify a particular workstation by its user-id, device address, or both. For example: II DVC 200 1/ UID WS1,(018),WS2(019) II LFD WKSTFILE The UID statement in this example indicates that the following three workstations will automatically be connected: any workstation logged on with a user-id of WS1, the workstation with the address 018 and logged on with any user-id, the workstation with the address 019 and logged on with a user-id of WS2. If these three conditions are not satisfied, the job remains in the scheduling queue. Remember that workstations specified in the UID statement are required; therefore, the job will not run until these devices are available (that is, logged on). Although the (n) portion of the nnn parameter and the REQ 1(n)] parameter are generally unnecessary in the DVC statement when the UID statement is used, you may encounter a special situation. For example: If DVC 200(4) Ii UID WS1,WS2 /1 LFD WKSTFILE The DVC statement indicates that the job can use up to four workstations. The two identified in the UID statement are required and, provided they’re logged on, will automatically be connected at execution time. Two more workstations (any two) can optionally log on and then connect to the job with the CONNECT command. Remember, you can specify $Y$MAS as a user-id to assign the job’s master workstation to a job. Specifying a Remote Disk File To indicate that a disk file is located at a remote host in a DDP network, specify the HOST=host-id keyword parameter on the II DVC statement. The host-id is one to four alphanumeric characters long and identical to the label-id of the LOCAP macroinstruction in your ICAM network. $HOST (in place of a host-id) indicates that the file is located at the job’s remote originator (the remote host that initiated the job). Cr 4-16 70044623-000 Getting the Most Out of the Basic Job Control Statements Consider the following: II JOB MYJOB 1/ II II II DVC5Ø,HOST=A123 VOL 0000028 LBL FILE1 LFD REMOTE II EXEC PROGA I& The DVC statement in the preceding device assignment set means that the disk file is located at host A123. Note: The host you specify (using either a host-id or $HOST) must be a remote host. Ifyou specify a local host, you’ll receive a data management error message (DM21 INVALID DEVICE ASSIGNMENT). For information about DDP facilities, see the Distributed Data Processing Programming Guide, 7004 4508. For more information about the originator, see the OPTION ORI statement in “Selecting Optional Features” in Section 6. See “How Job Control Statements are Presented” in Appendix A for information about coding job control statements containing positional as well as keyword parameters. Indicating Use of the DDP Program-to-Program Facility If your program is written in BAL and uses consolidated data management macros, you can use DDP’s program-to-program facility. In its simplest form, this facility allows a program at one host (the primary) to initiate communication with a program at another host (the surrogate). The job control stream for each program participating in this simple conversation must contain a DVC PROG job control statement. Used in place of II DVC, II DVC PROG begins the device assignment set for the program-toprogram type file. The format is: //Esymbot] DVC PROG t,job-name][,HOST=host-id) You can specify one II DVC PROG statement in any single-step job control stream. (A single-step job requests the execution of only one program.) The device assignment set must contain all LFD statement and may contain all LBL statement for cataloging purposes. 70044623-000 4-17 Getting the Most Out of the Basic Job Control Statements The job-name parameter identifies the name of the other participant in the programto-program communication. For example, when specified in the II DVC PROG statement for the primary, job-name identifies the surrogate. When specified in the II DVC PROG statement for the surrogate, job-name identifies the primary. This parameter is required in the II DVC PROG statement for the primary, but is optional in the// DVC PROG statement for the surrogate. The HOST=host-id parameter simply identifies a particular host in a DDP network. The host-id is one to four alphanumeric characters long and identical to the label-id of the LOCAP macroinstruction in your ICAM network. You use $HOST (in place of a host-id) to indicate the originator (the host that initiated the job). Consider the following control streams: HOST AAAA If JOB MYJOB HOST BBBB // JOB YOURJOB 1/ DVC PROG,YOURJOB, HOST=BBBB /1 LFD THISFIL If DVCPROG // LFD THATFIL If EXEC PROG1 If EXEC PROG2 I& The II DVC PROG statement in MYJOB indicates that communication can only be established with PROG2 the program identified in YOURJOB at host BBBB. PROG1, in this case, must act as the primary. The II DVC PROG statement in YOURJOB means that PROG2 is a surrogate in the program-to-program communication with PROG1. PROG2 can also act as the surrogate when other job control streams declare II DVC PROG,YOURJOB,HOST=BBBB. Now consider the following: - HOST AAAA HOST BBBB If JOB MYJOB II JOB YOURJOB // DVCPROG,YOURJOB,HOST=BBBB If LFD THISFIL // DVC PROG,MYJOB, HOST=AAAA 1/ LFD THATFIL 1/ EXEC PROG1 I& 4-18 II EXEC PROG2 I& 7004 4623000 Getting the Most Out of the Basic Job Control Statements These two job control streams indicate that only PROG2 at host BBBB and PROG1 at host AAAA can communicate with each other. The first program to open the programto-program type file is considered the primary. Although primarily intended for communication between programs executing on different hosts, the program-to-program facility can be used between programs executing on the same host. For more information about DDP’s program-to-program facility, see the Distributed Data Processing Programming Guide, 7004 4508. More Information about the Characteristics of Your Volumes We have used the VOL job control statement to specifr the volume serial number. It also has additional parameters for further identifying each volume to the system. Once again, its format is: II [sythot) VOL Mcc N NMcc F- votsn1I I ( L (NS) I(N0V) I votsn ir CS) (NS) (NOV) (PREP) (PREP) Fvotsn 2j (5) I (NS) I (NOV) (PREP) L SCRATCH 1 volsri 2r CS) I I I I J I I L votsn F3j CS) (NS) (NOV) J SCRATCH () (NOV) (PREP) LRE SCRATCH Refer to this format when each new parameter is introduced. Notes: 1. If all the volumes used to contain a multivolume file are going to be online simultaneously (mounted on different devices during the course of a single job step), the NOV and PREP options, if used, must be specified for each volume. 2. The DVC specification in the device assignment set is used to determine if more than one device is being used. 3. In a multivolume file, if the individual volumes are mounted on separate devices, the NOV and PREP options can be specified only for the individual volumes. 4. If the PREP option is specified for any volume in a multivolume file sequentially mounted on one device, it applies to all volumes in a multivolume file. NOV must be specified for the last volume in the file for it to apply to all volumes in the file. 7004 4623-000 449 Getting the Most Out of the Basic Job Control Statements More Than One Volume in a File When we discussed the ALT parameter of the DVC job control statement, it was stated that all volumes in the file must be specified on the VOL job control statement of the device assignment set for the two devices sharing a logical unit number. (See “Multiple Volumes in a File? Use Alternate Devices to Decrease Operator Setup Time” earlier in this section). The example given was: /1 DVC 1ØØ,ALT II VOL T11111,T22222,T33333,T44444 Each group of numbers specified on the VOL job control statement (Tillil, T22222, etc.) represents the volume serial number of the volumes in the sequence in which they are mounted. Remember, whenever there is more than one volume in a file, notify the operator of the mounting sequence. If more than eight volume serial numbers are listed, a nonbiank character must appear in column 72 of the VOL job control statement and one or more continuation cards (Appendix A) must follow. For example: Column 72 (continuation) II VOL T11111,T22222,T33333,T44444,T55555,T66666,T77777,T88888, /11. T99999,TAAAAA 1 X Continuation CoLumn Indicator (Optional) You can also specify multivolume files by using separate VOL control statements, like this: II VOL Tillil II VOL T22222 1/ VOL T33333 This method has an advantage over the continuation method in that you can change VOL specifications easier if they are coded separately. C’ 4-20 7004 4623-000 Getting the Most Out of the Basic Job Control Statements The VOL statement’s (NOV) and SCRATCH parameters provide you with the option of not listing each specific volume serial number in a multivolume file. For further discussion of these parameters, see “Ignoring or Changing the Volume Serial Number” later in this section. Special Characteristics of Tape Volumes Tape volumes have certain mode characteristics, such as bytes per inch, parity, and the number of tracks (7 or 9). The mode characteristics of tape volumes are specified using the Mcc parameter. The values force are given in Table 4-1. Suppose you are using a UNISERVO® 12 magnetic tape subsystem, and the tape volume is 7-track, 200 bytes per inch, even parity, with the translate and convert features off. The mode setting is 20 and it would be coded as M20. The volumes being used are coded as the remaining parameters. II VOL M2,T11111,T22222 If the Mcc parameter is omitted, the mode settings specified at system generation time are used. If your supervisor supports block numbering and you have specified BKNO=YES in your program’s file definition macroinstruction (or BC$CLNM for PIOCS), data management will check block numbers on input tape volumes or write sequential block numbers on output tape volumes. If you want to suppress block numbering or checking during initialized processing, you use the N parameter on the VOL job control statement. Initialized processing includes use of the TPREP utility routine or the PREP option on the VOL statement as well as processing of input or output files with nonstandard labels or no labels. When you specif5r N, block numbering is suppressed for all volumes included on the VOL statement. For noninitialized processing, the N parameter is ignored. That is, if your supervisor supports block numbering and you have specified it in the file definition macroinstruction, you cannot suppress checking or writing of block numbers by using the N parameter. For details about block-numbered tapes, see the Consolidated Data Management Macroinstructions Programming Guide, 7004 4607. For example, to suppress block numbering on two tape output volumes with volume serial numbers of T11111 and T22222, code as follows: if VOL t1,T11111,T22222 When both the N and Mcc parameters are used, code them as one parameter. For example: 1/ VOL Nt420,T11111,T22222 UNISERVO is a registered trademark of Unisys Corporation. 7004 4623.000 4-21 Getting the Most Out of the Basic Job Control Statements C Table 4-1. Mode Characteristics Tape cc Bytes per Inch Parity Translate Feature Convert Feature UNISERVO 12/16 Magnetic Tape Volumes 7-track 10 20 28 30 38 50 60 68 70 78 90 A0 A8 B0 B8 200 200 200 200 200 556 556 556 556 556 800 800 800 800 800 9-track C8 CO 800 1600 Odd Even Even Odd Odd Odd Even Even Odd Odd Odd Even Even Odd Odd Off Of f On Off On Of f Of f On Of f On Off Of f On Of f On On Of f Of f Off Off On Of f Of f Of f Of f On Of f Of f Of f Of f Odd Odd Of f Of f Of f Of f UNISERVO 22/24 Magnetic Tape Volumes 9-track C8 CO 800 1600 Odd Odd__j Off Off I j Off Off C, UNISERVO 26/28 Magnetic Tape Volumes 9-track CO DO 1600 6250 Odd Off Of f Off Of f Off Off Of f Of f Off Of f Of f Of f j__Odd 2145 and BT3200 Magnetic Tape Volumes 9-track C8 CO DO 800 1600 6250 Odd Odd Odd 5073 Magnetic Tape Volume 18-trackl NA 38000 Odd Extending Your Tape Volumes If you recall, when we were assigning file names to files, we used the LFD job control statement (see “Assigning a Logical File Name to the File” in Section 3). Well, now we’ll use this same statement to extend our file. Once again, here is the format: //Esymbo(] LFD ffitename 1 [*filenrf rExTEND [ IN11[ 1IT lafIL L C,, 4-22 7004 4623-010 Getting the Most Out of the Basic Job Control Statements Looking at the format, we see the optional parameter EXTEND. The EXTEND parameter lets us add information to the present end of a tape or disk file, provided our program allows us to do so and the following job control conditions are met: • The PREP option is not specified on the VOL job control statement. • The file being extended is the only file on the volume. • The file uses standard labels. • The file specified is an output file. The following example shows the use of the LFD statement to extend the file ADDR1: /1 LFD ADDR1,,EXTEND The following device assignment set, which includes this LFD statement, illustrates how to extend a file (MAST) on volume Tilill. II II ii II DVC VOL LBL LFD 100 T11111,T22222,T33333 MASTER MAST,,EXTEND If you expect additional volumes will be needed to accommodate extension of the file, you can add the volume serial numbers of any tapes to the VOL statement. The following device assignment set indicates that the extension of MAST will result in a multivolume file. If II II If DVC VOL LBL LFD 100 T11111,T22222,T33333 MASTER MAST,,EXTEND If you are extending a tape file that already has multiple volumes, your VOL statement has to specify only the last volume containing the file plus any additional volumes. You must include the serial number of the file’s first volume as the second parameter (file-serial-number) of the LBL statement. See “Multivolume File? Assign Each Volume a File Serial Number” later in this section for more information. Suppose, for example, the file MAST is on volumes Tilill, T22222, and T33333. If you expect the file’s extension to require an additional tape volume, you would code the device assignment set as follows: /1 II II If DVC VOL LBL LFD 100 ,,,T33333,T44444 T11111 1 MASTER MAST,,EXTEND The volume serial number Tillil is required to identify T33333 and T44444 (the new volume) as being part of the same file. 7004 4623-000 423 Getting the Most Out of the Basic Job Control Statements Note: When referencing multivolume files on the VOL statement, any undeclared volume serial numbers must be represented with commas. Additionally, if Mcc, N, or NMcc are not specified for the first positional parameter, you must supply a comma. In the VOL statement in our previous example (I / VOL ,,,T33333,T44444) the first comma represents the first positional parameter. The second and third commas represent Tilill and T22222, respectively. The Consolidated Data Management Macroinstructions Programming Guide, 7004 4607, also contains information about extending tape files. Sharing Disk Volumes More than one job can share a disk volume. But suppose you are updating a file that will be accessed by other user jobs. They should not access the file until the update is completed, or else their output would not be the most current. You can indicate, on the VOL job control statement, that the disk volume is nonsharable; thus the file cannot be accessed. The system will not allow other jobs to begin execution until your job has finished the update. Assume the file being updated has a volume serial number of DSKO83 and it should be nonsharable. You indicate this by using the (NS) parameter. The parentheses are coded as part of the parameter, and there is no comma separating the volume serial number and the (NS) parameter. This is coded as: II VOL DSKO83(NS) When there is more than one volume in the file (DSKO83, DSKO76, and DSKO93, for instance) and they are all nonsharable, code it in this manner: If VOL DSKe83(NS),DSKe76(NS),DsKg93(NS) Sharable disk volumes are the default condition. Ignoring or Changing the Volume Serial Number Through the VOL job control statement, you have the option of ignoring volume serial numbers. This allows the use of any available volume or one with an unknown volume serial number. For example, you want to create a tape file. The operator is told that you can mount any unused tape with a volume serial number (it does not contain a permanent file, and you do not want a scratch tape because you are creating this file for other jobs). Since you don’t know what tape the operator will use, you don’t know the volume serial number for your VOL job control statement. By using the (NOV) parameter and a dummy volume serial number, you can use a volume without specifying the correct volume serial number. V cV 4-24 7004 4623-000 Getting the Most Out of the Basic Job Control Statements Code it this way: II VOL DUMMY(NOV) Notice that there is no comma separating the dummy volume serial number and the (NOW parameter. The parentheses are part of the parameter. After the job is processed, you should be informed, in some manner, of the volume serial number of the created tape. This volume serial number must be used on the VOL job control statement for any subsequent job using this tape volume. Notes: 1. The volume serial number DUMMY is used here just as an example. You can use your own dummy volume serial number, but if it isn’t a unique one, keep the following in mind: if two or more jobs use the same dummy volume serial number for a disk volume, these jobs can run concurrently and share the same disk volume. This may or may not be desired. Ifa job uses the (NOV) parameter with a dummy volume serial number for one type of volume (e.g., a tape), and a second job uses the (NOV) parameter with the same dummy volume serial number for another type of volume (e.g., a disk) or, for another nonsharable volume (e.g., another tape), the secondjob is not executed until the firstjob is finished. 2. Ifyou specify a volume serial number and the volume with that serial number is mounted on a device before the job goes into execution, that volume (and the device on which it’s mounted) is used even ifyou’ve specified a different physical device number on the DVC statement. If, however, you use I / VOL DUMMY (NOW the physical request is not ignored. With the VOL statement’s SCRATCH parameter you can specify a multivolume file without listing each volume’s serial number. Consider this example: /1 VOL VSN1,VSN2,SCRATCH This statement declares a multivolume file and requests that the volume VSN1 with the serial number be mounted first and volume VSN2 be mounted second. The SCRATCH parameter indicates that after VSN2, any volumes can be mounted. When you request scratch processing, a message to mount a scratch volume is displayed (after any explicitly requested volumes have been taken care of) on the system console. Any volume will then be accepted until the end of file. Remember, because data management cannot check for the proper serial numbers at this point, you should make sure that the operator knows exactly what volumes to mount and the sequence to mount them in. The SCRATCH parameter can also be used alone. For example: /1 VOL SCRATCH 70044623-000 4-25 Getting the Most Out of the Basic Job Control Statements This statement requests scratch processing for all volumes in the file. You may want to use the SCRATCH parameter if you have a 20-volume diskette file for example, and you don’t want to list 20 volume serial numbers in your job control stream. When coding job control statements remember that the SCRATCH parameter can only appear once in a VOL statement and it is always the last parameter specified. You can also suppress checking of volume serial numbers for all volumes of a multivolume file by specifying NOV in the VOL statement for the last volume of the file. You can change a volume serial number by specifying the new volume serial number followed by the (PREP) parameter. You can also use this to assign a volume that currently does not have a volume serial number (scratch volume or a new volume). Any information that is currently on the volume is scratched. Your job creates an output tape that you want saved and to be assigned the volume serial number of TAPO99. It would be coded as follows: II VOL TAPØ99(PREP) Once again, there is no comma separating the new volume serial number and the (PREP) parameter. The parentheses are part of the parameter. Notes: 426 1. Be very careful when you use the PREP option on a file to be processed by the librarian. When you specify the PREP parameter, the tape is prepped every time it is opened as output. The librarian closes output tape files whenever they are to be used as input and then reopens them as output. If a tape file is to be reused as an output file within the same job, the librarian closes it as input and reopens it as output. This reopening causes the tape to be reprepped (if PREP was specified), thereby effectively erasing all the information previously produced. Therefore, use this option only if the file will be output only, or output, then input. Otherwise, use the TPREP utility to prep the file. The PREP option cannot be suppressed. You must redefine the tape file without specifying the PREP option on the VOL statement. 2. For multivolume files, if PREP is specified for any of the volumes, all volumes in the file are prepped. 3. SCRATCH lets you mount additional tape volumes (unlimited processing); however, these additional volumes are not prepped if PREP is specified. If they must be initialized, use the TPREP utility routine. 7004 4623.000 Getting the Most Out of the Basic Job Control Statements Multivolume Files Online Simultaneously You may have an application, a data base system, for example, that requires a large multivolume file, with the volumes online simultaneously (since they are accessed in a random manner). Suppose you have a 3-volume file (volumes A B, and C). You would code the device assignment set for the file like this: 1/ II II II II II II II II DVC 50 VOL A DVC 51 VOL B DVC 52 VOL C LBL DATA VMNTNO LFD BASE More Information on Disk and Format-Label Diskette File Allocation You use the EXT job control statement to allocate the space (extent) needed by a disk or format-label diskette file. The format is: //Esyrribo[] EXT fMI 1STI r L c ii [ inch FJJ L , addr Tccc:hh fmi L l(bi,ai) TBLK CYL TRK OLD fmj L l(bi,ai)I ,..1[,OLD][,FIX][ØNTERM) ] All the parameters are optional. The File Type With the first parameter of the EXT statement, specify the type of file you’re allocating the extent for. 7004 4623-000 4-27 Getting the Most Out of the Basic Job Control Statements MIRAM files are discussed in the Consolidated Data Management Programming Guide, UP-9978. System access technique files are described in the Supervisor Technical Overview, UP-8831. For the EXT job control statement, you can specify MIRAM (multiple indexed random access method) files, indicated by coding MI, or SAT (system access technique) files, indicated by coding ST. If, for example, you wanted to use the multiple indexed random access method, you would code: II EXT MT,C,,CYL,1 Formatting a File and Using Contiguous Space Files are formatted using the parameters F, BLK, and (bi,ai). These indicate that you are going to format the file, F, in terms of blocks, ELK, to a certain length, (bi,ai). The bi indicates the number of bytes in the block, and the ai indicates the number of blocks in the file. Files can be formatted only in terms of blocks. Suppose that you have a MIRAM file to allocate and it contains 5000 blocks, each 472 bytes long. Refer to the format of the EXT job control statement to see the correct position of each of the parameters you are going to see: MI, F, BLK, and (bi[,ai]). It would be coded as follows: if EXT MI,F,,BLK,(472,5000) You can set up your program to access a particular block (or blocks) within the file. The EXT job control statement is also used to allocate space contiguously. When you allocate a file, there may not always be a single extent (a single contiguous area) available on the disk or format-label diskette. Suppose, for example, you need 10 cylinders for a file but there aren’t 10 contiguous cylinders anywhere on the volume. Instead, there are 2 contiguous cylinders in one place, 3 in another, and 5 more in another. If this is the case, OS/3 disk space management divides the file among 3 different areas resulting in a 3-extent file. The C parameter (shown as one of the choices in the second parameter in the format) can prevent this from happening so that if enough contiguous cylinders cannot be found, the file won’t be allocated. Note: A single file on disk or format-label diskette can have no more than 16 physical extents. If a file already occupies 16 extents but more are needed, you must use another volume even if sufficient space is still available on the original volume. (The file becomes a multivolume file.) A VTOC listing of the volume will tell you in advance how many extents an existing file occupies. Just remember there can be only 16 extents for a single volume file, 32 extents if the file occupies two volumes, 48 for three volumes, and so on. C> 4-28 7004 4623-000 Getting the Most Out of the Basic Job Control Statements When you specify the absolute starting address (the addr parameter, explained in “Terms of Allocation” later in this section), you must allocate contiguously. You must also specifr addr in hexadecimal. The use of continguous space reduces file access time, thus reducing job processing time. To allocate a MIRAM file that contains 1000 blocks, each containing 1024 bytes, and you want contiguous disk space, code as follows: II EXT MI,C,,BLK,(1ø24,1øø) The C and F parameters can be combined to form one parameter. Use this if you want contiguous, formatted disk space. A comma is not needed to separate these parameters. For example, to allocate 300 blocks, each 256 bytes in a contiguous area, using the multiple indexed random access method, code the following: /1 EXT MI,CF,,BLK,(256,300) Notice that we’ve been coding BLK in these examples. BLK, however, is the default condition you could have coded the last example like this: - II EXT MI,CF,,,(256,300) Your Disk or Format-Label Diskette File Needs More Space When a disk or format-label diskette file is allocated, a certain area is reserved for a file. It is possible, however, the amount that you estimate may not be enough. There may be more information than you realized; an update of the file made it larger than originally intended, or, you may be replacing existing information with new information (this requires the use of the INIT parameter of the LFD job control statement, which is explained in “The Expiration and Creation Date of the File” later in this section). This new information may require more space than you had previously allocated. Job control can extend the requested area, if necessary. Let’s sayyou’re setting up a file to contain 700 or 800 entries for an accounts payable procedure, and you estimated the file would need 100 blocks, each 256 bytes in length. Since this is only an estimate, you can use a parameter in the EXT job control statement to allocate more space if it is needed. This is called dynamic extension. If it isn’t needed, it isn’t allocated. In this way, you don’t waste space by allocating more than necessary. The parameter used to provide this dynamic extension is the third parameter group in the format. The inc parameter is the amount of additional space that you request. This dynamic extension is in terms of cylinders. 70044623-000 4-29 Getting the Most Out of the Basic Job Control Statements Specifying 0 indicates you do not want to allow for dynamic extension of the file. Use this when you want to limit the amount of information placed in the file. If nothing is specified, by default, one cylinder is generated. Assume, for the accounts payable application, that we estimated 100 blocks, each 256 bytes long, on a formatted, MIRAM file. We want two additional cylinders if dynamic extension is necessary. The coding would be: II EXT MI,F,2,,(256,1øø) Terms of Allocation We’ve already covered some allocation terms in previous examples: BLK for allocating in terms of blocks and CYL for allocating in terms of cylinders. With the addr parameter you can also specify the absolute cylinder address in hexadecimal at which the file is to begin. When you do this, allocation is in terms of cylinders. Note: The absolute address can be specified in decimal by coding D’number’, or hexadecimal by coding X ‘number’ Any number not preceded by D or X and enclosed in single quotes is considered hexadecimal. Let’s say you need one MIRAM file, allocated contiguously, allowing 5 cylinders for dynamic extension, and it must start at cylinder 78. Code it: 1/ EXT MI,C,5,4E Do you recall specifying the amount of blocks needed for the file? One of the examples looked like this: if EXT IS,C,,BLK,(1024,1øøC) Specifying (1024,1000) told job control how many blocks to allocate: 1000. When you specify allocation in terms of cylinders or by absolute address, you must indicate how many cylinders to allocate for the file by using the mi parameter. If you wanted 10 cylinders, it would have been coded as: II EXT MI,C,5,CYL,1[O The TRK parameter allows you to allocate disk and format-label diskette files in terms of tracks. The TBLK parameter allows you to allocate a file in blocks by track rather than in blocks by cylinder (BLK parameter). The Tccc:hh parameter is similar to the addr parameter because it lets you specify the absolute hexadecimal (X’number’ or number) or decimal (D’number’) starting address of the file. The address, however, is a track address in cylinder/head format and the allocation is in terms of tracks, not cylinders. For more information about file allocation by track, see the Consolidated Data Management Macroinstructions Programming Guide, 7004 4607. C 430 7004 4623-000 Getting the Most Out of the Basic Job Control Statements Note: You cannot allocate a disk file or format-label diskette file by track (using TRK, TBLKor Tccc:hh) when creating MIRAM files with IRAM characteristics. Remember that when you specify CYL, addr, TRK, or Tccc:hhh, you must specify the number of cylinders or tracks with the mi parameter. Allocation Amounts The parameters for indicating the amount of space wanted were shown, indirectly, when we discussed formatting and terms of allocation. These were coded as the fifth parameter, mi or (bi,ai). The mi parameter is used with either the CYL, addr, TRK, or Tccc:hh parameter, and indicates the amount of cylinders or tracks needed by the file. These were covered in the last example of”Terms of Allocation” in this section. The (bi,ai) parameter is used with the BLK or TBLK parameter for allocating in terms of blocks (rounded up to cylinders or tracks, respectively). Remember BLK is the default parameter so you don’t need to specify it. The bi indicates the amount of bytes in the block, and the ai indicates the number of blocks in the file. For instance, this example II EXT t’1I,C,5,CYL,16 indicates an allocation of 10 cylinders, while either of these examples II EXT MI,F,1ø,,{256,.1.øO) 100) 1 II EXT MI,F,1C,BLK,{256 indicates an allocation of 100 blocks, each 256 bytes in length. You can specify any number of separate disk areas (extents) for an individual file. A reason for using several different extents for a single file would be to decrease data access time, thus reducing processing time. Assume the program is designed such that the file can be divided into two different extents. The first extent contains data used only by the first part of the program; the second extent contains data used only by the second part of the program. For instance, the first extent contains hourly pay rates for calculating gross pay, and the second extent contains payroll deductions to subtract from the gross pay to get the net pay. Once the gross pay is calculated, the first extent is no longer needed; the • program will not need this information again. It only needs the deduction information in the second extent to finish processing. In this way, one large extent is divided into two smaller extents, reducing the amount of access arm movement for the disk unit. 70044623-000 4-31 Getting the Most Out of the Basic Job Control Statements For example, you have a file divided into two different extents. The total size of the file is 20 cylinders. The first part of your program uses 12 cylinders, and the second part needs 8 cylinders. They can both be specified on the same EXT job control statement. The information in the first four parameters applies to both extents in the file. Look at this portion of the format: [jfmi ilIJFmj 1 t,aif L JL li,ai)f The mj parameter means the same as the mi parameter and the (bj,aj) parameter means the same as the (bi,ai) parameter. The only difference is that mj and (bj,aj) are used for additional extents in the file. So, we could code the two extent files (12 cylinders and 8 cylinders) as: If EXT MI,C,1,CYL,12,8 1 23 Notes: 1 This applies to both extents. 2 This is the aNocation for the first extent. 3 This is the allocation for the second extent. If you allocated in terms of blocks, with the first extent occupying 300 blocks, each 256 bytes in length, and the second extent occupying 700 blocks, each 256 bytes in length, it would be coded as: If EXT MI,C,1,BLK,(256,300),(256,700) I I I I 1 2 3 Notes: 1 This applies to both extents. 2 This is the allocation for the first extent. 3 This is the allocation for the second extent. C’ 4-32 70044623-000 Getting the Most Out of the Basic Job Control Statements You can also specify separate extents for an individual file by coding separate EXT statements, as we did when we coded separate VOL statements for a multivolume file. Refer to “More Than One Volume in a File” earlier in this section for details. You have coded separate extent specifications for our previous example, like this: 1/ EXT MI,C,1,BLK,(256,300) LK,(256,700) MI,C,1 B /1 EXT 1 Changing the Specifications of a Previously Allocated File Sometimes, you may want to change some of the information pertaining to a previously allocated file. Use the OLD parameter to do this. The following portion of the EXT job control statement format shows OLD as either the fourth or seventh parameter: addr Tccc:hh BLK TBLK CYL TRK OLD , 1m 1 l(bi[,ai))I rL fmj 1 ,..1[,OLD][,FIX][NTERM) bjE,ajDf J When coded as the fourth parameter, OLD means you want to change the automatic allocation amount for dynamic extension (the third parameter) for a previously allocated file. Suppose you specified one cylinder when a MIRAM file was originally created. To change this specification to five, you code the EXT statement as follows: II EXT ,,5,OLD You can omit the first and second parameters, since they are ignored if specified. When OLD is coded following the allocation amount (mi, mj, etc.), it increases the original allocation amount for your extents. 70044623-000 4-33 Getting the Most Out of the Basic Job Control Statements Let’s assume your file was originally a 30-cylinder, sequential file and you discover you really need 50 cylinders. To obtain these extra 20 cylinders, you can change the allocation amount for the file by using this EXT job control statement: II EXT ,,,CYL,2@,OLD When changing the allocation amount, you may omit the first, second, and third parameters since they are ignored, if specified. Allocating Space in the Fixed-Head Area of Your 8417 Disk If you have an 8417 disk subsystem with a fixed-head feature, use the FIX parameter with your EXT statement when you want to allocate the extent in the fixed-head area. See the Consolidated Data Management Macroinstructions Programming Guide, 7004 4607, for information about the 8417 fixed-head disk. No Terminate Option for Insufficient Extent Space The NTERM option, when used, informs you if the extent cannot be allocated because of insufficient disk space or because a specified absolute disk area is already in use (error code 36). Rather than terminating the job, which is what happens without this option, the system displays a JC48 message and waits for either a retry (R) or cancel (C) reply. This allows your operator to evaluate the files currently on the disk and to clear those that are not needed so your job can continue. Information about Data-Set-Label Diskette File Allocation To allocate space for a file on data-set-label diskette, include an EXT statement in the device assignment set for the diskette. A data-set-label diskette file is always a 1-extent, nonextendable, sequential file. Therefore, several of the EXT statement parameters and options that we discussed in the preceding section do not apply. To help you avoid confusion, refer to the following EXT statement for data-set-label diskette: Iltsymbot) EXT MI,C,ø,BLK,(bi,ai)[,NDI) 4-34 7004 4623000 Getting the Most Out of the Basic Job Control Statements Just as for disk, the first parameter of the EXT statement indicates file type. The extent for a data-set-label diskette file must be contiguous and cannot be dynamically extended. So specify C for the second parameter and 0 for the third parameter. Space on a data-set-label diskette is allocated by block, so BLK and (bi,ai) must be specified for the fourth and fifth parameters respectively. Specify the last parameter, NDI (non-data-interchange), for all System 80 data-set-label diskettes that are not basic data exchange (BDE) diskettes. If you omit this parameter, it is assumed that you’re allocating a BDE diskette (a single-sided, single-density diskette having 128-byte sectors, 26 sectors per track, and 73 tracks.) For more information about the characteristics of data-set-label diskettes, see the Consolidated Data Management Macroinstructions Programming Guide, 7004 4607. The following is an example of an extent statement for a data-set-label diskette file having 100 blocks of 80 bytes each: if EXT MI,C,ø,BLK,(80,1Oøø) Using Your File Identifier More Efficiently So far, the LBL job control statement was used to designate the individual files on a volume by providing a file identifier (labeling a file). We are now going to explain the optional parameters, and a special variation of the file-identifier parameter, that improve file handling efficiency. Once again, the format of the LBL job control statement is: //[symboL] LBL ffile-identifier 1 l’file-identifier’i [,creation-date] , [ J [fi1e.seriat.number1[,expiration.date] 1_i L 1VCHECK 1 {fite.seuence .number} [ 1 {eneration.nu nber} version-number As each individual parameter is introduced, refer to this format. 7004 4623.000 4-35 Getting the Most Out of the Basic Job Control Statements But first, we’ll describe the special variation of the file-identifier parameter. Sometimes, you may not want more than one job to access a particular file at the same time, for example, when it is being updated. If it’s a disk file, you can make it lockable by assigning a 6-byte lock ID as a prefix to your file identifier. Ninety-nine lock IDs are available: $LOKO1 through $L0K99. The lock ID may be followed by up to 38 characters. The LBL statement for a lockable file might be coded this way: II LBL $LOK15MASTERFILE Once you have assigned a lock ID to the file, it is locked automatically each time it is opened. The type of lock (read-only or write-only) is determined by the ACCESS parameters in your file definition macroinstruction for the file. See the Consolidated Data Management Macroinstructions Programming Guide, 7004 4607, for a complete description of the file lock facility. Multivolume File? Assign Each Volume a File Serial Number When using a file consisting of multiple volumes, a file serial number can be assigned to identifSr each volume as being a member of the file. In this way, a volume that is not a member of the file cannot be used. The file serial number is identical to the volume serial number of the first volume of the file. For instance, there are four volumes in a file, in this sequence: 1. XYZ 2. P10 3. A79 4. TPL The file serial number for all the volumes in this file would be XYZ. You use the VCHECK parameter to either create a file serial number on output volumes, or to check the file serial number on input volumes. This VCHECK parameter instructs job control to use the first volume serial number specified on the VOL statement as the file serial number. Once again, we have the four volumes, XYZ, PlO, A79, and TPL, in that order, in a file. We want to write a file serial number on them. Arbitrarily, the file identifier we are going to use is OUTPUT. Your VOL and LBL statements would look like this: II VOL XYZ,P10,A79,TPL II LBL O1JTPUT,VCHECK C 4-36 7004 4623.000 Getting the Most Out of the Basic Job Control Statements If this file was already created with a file serial number (input rather than output), it would be coded the same way. The VCHECK parameter writes on output and checks on input. The file-serial-number parameter is also used to write or check the file serial numbers of volumes, but in a slightly different manner. • Again, we have these same four volumes (XYZ, PlO, A79, and TPL) in the file. But, you only want to use the last two volumes, A79 and TPL, in that order, on this run. This is a previously created file; when it was created, the VCHECK parameter was used, giving a file serial number of XYZ to each volume. If we used the VCHECK parameter now, while trying to read only these two volumes, A79 and TPL, job control would use the volume serial number of the first volume specified on the VOL statement, A79, as the file serial number value. Since these volumes were created with a file serial number of XYZ, the job would not run. But, the file-serial-number parameter allows you to specify the particular file serial number to use. This case would be coded like this: V If VOL ,,,A79,TPL II LBL OUTPUT,XYZ Note: /When referencing multivolume files on the VOL statement, any undeclared volume serial numbers must be represented with commas. Additionally, if Mcc, N, or NMcc are not specified for the first positional parameter, you must supply a comma. In the VOL statement in our previous example (II VOL ,,479,TPL) the first comma represents the first positional parameter. The second and third commas represent XYZ and PlO respectively. V If either VCHECK or the file-serial-number parameter is omitted when a multivolume file is created, there is no file serial number for the file, or, if it’s a tape volume, there is no VOL1 label. The Expiration and Creation Date of the File You can limit the life of files by writing an expiration date with the LBL statement. This date indicates whether or not a file can be deleted by a scratch routine (by using the SCR job control statement, explained in “Scratching Unwanted Files” in Section 6) or by a function of data management. This is coded as the third parameter on the LBLjob control statement, and can take either of two forms: • yyddd In this form, yy is the year, and ddd is the day of the year. For example, February 10th is the 41st day of the year (31 in January, plus 10). 70044623-000 V 4-37 Getting the Most Out of the Basic Job Control Statements Rdddd In this form, R is a constant, and indicates a retention cycle is being used based on the creation date (either the next parameter, or the date set in the system). The dddd indicates the amount of days (1 -9999). For instance, you create an output tape with a file identifier of XRAY, and you want it to have an expiration date of the 98th day of 1991. This would be coded as: II LBL XRAY,,91098 If you omit the expiration date when writing a file, the current date is inserted for you. If you omit it when allocating a file, no date is specified and zeros are inserted. If you omit the date and allocate, then write to the file (in the same job step), the curren t system date is used. The creation-date parameter indicates the date the file is generated. If omitte d for a tape file or a disk output file, the date stored in the job preamble is used. If omitte d for a disk input file, this field is ignored. The creation date has only one form: yyddd, where yy is the year and ddd is the day. If you want a creation date of the file, identified by XRAY, to be the 100th day of 1991, code: II LBL XRAY,,,91100 Indicating the Position of the File when Several Are on a Tape Volume When you place more than one file on a single tape volume, you can indicate each file’s position on the tape by assigning sequence numbers. Later, if you want a particu lar file on that volume, you simply reference the file (in the II LBL statement) by its identifier and sequence number. You can only assign sequence numbers to standard labeled tape flies. When you create a tape file, you use the fifth positional parameter of the LBL II statement (file-sequence-number) to assign a sequence number. The following statement, for example, assigns a sequence number of 3 to PRMAST the third output file on a volume to contain 5 files: - II LBL PRMAST,,,,3 Later, when you want to read (input) PRMAST, you can go directly to that file by including the same statement (II LBL PRMAST,,,,3) in your device assignm ent set. When you specifSr the file sequence number, data management search es for the first file with that number. If it’s found, data management then checks the file identifier for a match. (If the file sequence number you specifr is not found or if the file identifiers don’t match, a data management error results.) 4-38 7004 4623.000 Getting the Most Out of the Basic Job Control Statements Remember, you must assign file sequence numbers when a tape file is created in order to reference that file by sequence number later. If you don’t assign a sequence number on output, data management assigns a number 1 to the file regardless of its position on the tape volume. If you don’t provide a sequence number on input, data management does not check for a sequence number but expects to use the first file encountered. In either case, omitting file sequence numbers means using another method to position the tape to the file you want (e.g., the II MTC statement or reading and closing preceding files without rewinding until the desired file is reached). Different Versions of a File Ordinarily, only one generation of a file is used by a program. There are instances, however, when more than one generation of the same file may be needed. For example, one generation contains payroll deductions only used in January, March, and May, and another generation has the payroll deductions used only in February, April, and June. To indicate the different generations of a file, you can use the 1- to 4-digit generation-number parameter of the LBL job control statement. This is used only with tape files, and is the sixth parameter shown in the format. By using this parameter, you can be sure the correct generation is used. Suppose you did have two different generations of the payroll deduction file, with a file identifier of CUSTMAST, and you want to use the second generation. This would be coded as: II LBL CUSTMAST,,,,,2 if you omit this parameter, data management assumes 0001. Let’s go one step further. Each generation of a file can have several different versions. Again, we have these two different generations of the CUSTMAST payroll deduction file. Generation 1 is used in January, March, and May, and generation 2 is used in February, April, and June. But, suppose each of these generations had two unique sections. Version 1 is used in odd-numbered years, and version 2 is used in evennumbered years. We could use the 1- to 2-digit version-number parameter to do this. Suppose it is January, 1990. We need generation 1 (January) and version 2 (1990 is even numbered). This would be coded as: II LBL CUSTMAST,,,,,1,2 If the version-number parameter is omitted, data management assumes 01. 70044623-000 439 Getting the Most Out of the Basic Job Control Statements C Changing the Label of a Disk File The REN statement is used to permanently change the label of a disk file through job control a simpler procedure than the alternative methods for renaming disk files. - The format of REN is: II[symbo[) REN tfdname, mew-labeL l’new-Label 1 [SNTERM] ‘1 The lfdname parameter identifies the file to be renamed. It must match the lfdname in the LFD statement for the file. The file’s new label is specified in the new-label parameter. New-label replaces the existing label identified in the device assignment set for the file. If new-label contains embedded blanks, it must be enclosed by single quotation marks. It may be from 1 to 44 alphanumeric characters in length. Specifring optional parameter NTERM causes any fatal errors encountered during the renaming process to be ignored, but permits the job to continue. If this parameter is present, the job continues running if a renaming error occurs, but the file is not renamed. If NTERM is omitted, the job terminates at the point of error. The REN statement is checked for syntax errors by the run processor during job stream validation. If no errors are detected, the job is queued and becomes a scheduling candidate. The run processor passes information from the REN statement to the step processor, which performs the actual renaming during job execution. The device assignment set for the file to be renamed must precede the REN statement. It is a good idea to place the REN statement within the control stream as close to the device assignment set for the file as possible, since II REN is only effective against files on volumes mounted when the REN statement is encountered. A file is renamed in the job step containing// REN, prior to execution of the program for that step, or prior to job termination if no EXEC statement follows II REN. Subsequent references to the renamed file must use new-label in the LBL statement of the device assignment set for the renamed file. Notes: 4.40 1. The REN statement is used only to rename disk or format-label-diskette files; it may not reference device assignment sets for data-set-label diskette or tape volumes. 2. REN statements are not permitted against files on SYSRES that begin with $Y$, or against files on SYSRUN that begin with $Y$R. 3. Don’t use /1 SKIP to bypass a device assignment set referenced by a REN statement that is not also bypassed. Ifyou do, you’ll get an error during the renaming process. (See “Adding Cards to a Stored Control Stream” in Section 6 for more information.) . 7004 4623-000 Getting the Most Out of the Basic Job Control Statements 4. Ifyou rename a cataloged file, you must recatalog the file under the new name. Suppose you have a program that calculates the engineering department’s payroll and outputs a disk file labeled EGRPAY. The control stream to rename the file EGRCOST looks like this: II II /1 II DVC VOL LBL LFD 50 DSKO1 EGRPAY DSKO1JT II REN DSKOUT,EGRCOST The file’s label is now EGRCOST. Suppose that a subsequent job step uses EGRCOST as input for calculating company-wide costs. Building on our first example, the renamed file is referenced subsequently in the control stream like this: II /1 If /1 DVC VOL LBL LFD 50 DSKG1 EGRPAY DSKOUT /1 REN DSKOUT,EGRCOST • II II II II 7004 4623-000 DVC VOL LBL LFD 50 DSKO1 EGRCOST DSKIN 4-41 Getting the Most Out of the Basic Job Control Statements A single REN statement applies only to the first volume in a multivolume file. To rename a multivolume file, therefore, you must specify a unique REN statement for each volume in the file. If EGRPAY in our first example had been a multivolume file, we would have renamed it this way: 1/ If 1/ II DVC VOL LBL LFD 50 DSKO1 EGRPAY DSKOUT1 II If If 1/ DVC VOL LBL LFD 51 DSKO2 EGRPAY DSKOUT2 If REN DSKOUT1,EGRCOST 1/ REN DSKOtJT2,EGRCOST Use the REN statement carefully to avoid renaming a file concurrently used by another job. To help prevent this problem, establish nonsharable status (using the NS option of the VOL statement) for endangered disk volumes, or use passwords known only to selected personnel. 4-42 7004 4623-000 C Getting the Most Out of the Basic Job Control Statements Specifying Qualifiers for File Identifiers The QUAL job control statement is used to prefix a qualifier to all subsequent file identifiers in a job. The format of the QUAL statement is: //[symboL] QUAL quatname The qualname is a 1- to 8-character alphanumeric name. When specified, this name followed by a slash becomes the qualifier, and is automatically prefixed to each subsequent file identifier in your job control stream. Consider the following example: II /1 II 1/ II /1 II QUAL SMITHCO DVC 60 1/ VOL DISKO1 LBL PAYABLES.TAXES LFD PAYFILE DVC 60 1/ VOL DISKO1 LBL INCOME.INTEREST LFD INFILE In this example, SMITHCO is specified as the qualifier and will be prefixed, along with a slash, to each subsequent LBL file identifier producing: SMITHCO,PAYABLES.TAXES and SMITHCO/INCOME.INTEREST. The qualifier remains in effect until the end of the job or until another QUAL statement is encountered. If the next QUAL statement specifies another qualname, that name becomes the qualifier for any subsequent file identifiers. If no name is specified (e.g., II QUAL), use of the qualifier is terminated. An LBL file identifier that is already prefixed with an alphanumeric name and a slash overrides the QUAL statement qualifier. Consider this example: II 1/ If Ii If Ii II QUAL SMITHCO DVC 60 II VOL DISKO1 LBL PAYASLE.TAXES LFD PAYFILE DVC 60 1/ VOL DISKO1 LBL INCOME/INTEREST LFD INFILE INCOME! in the second LBL statement is already considered a unique qualifier; therefore, SMITHCO/ will be prefixed to PAYABLE.TAXES but not to INCOME/INTEREST. Because the QUAL statement is especially useful in identif’ing cataloged files (see “File Cataloging” in Section 6), QUAL is also discussed in the File Cataloging Technical Overview, 7004 4615. 7004 4623-000 4-43 Getting the Most Out of the Basic Job Control Statements C More Information about the Logical File So far, you know the LFD job control statement is used to provide a file name that associates the file defined in the program with the file information in the control stream. Now, by introducing the optional parameters, you will see some of the other functions it provides. Once again, its format is: //Esyrnbot) LFD ffitename l*fllenamel fn] [ [ 1] L L EXTEND INIT PREP ID IGNORE Refer to this format as each parameter is introduced. We have already discussed the filename parameter. An asterisk (*) indicates that the file label is lockable. Reserving an Extent Information Storage Area Files are defined on disk and format-label diskette volumes in terms of extents. An extent is space on the volume made up of contiguous tracks. If you recall, we used the EXT job control statement to split up a file into two extents. So, in the strict sense, an extent is not always the entire disk area a file requires; at times it is, but at other times it isn’t. Information about the extents is placed in the job’s prologue along with other information needed to regulate your job. (See “Minimum and Maximum Main Storage” in Section 2.) On the JOB statement, you specify the minimum and maximum amount of main storage needed to execute your largest job step. However, in order for job control to reserve sufficient main storage for the extent information in the prologue, you must specify the number of physical extents a file has in the second parameter of the LFD statement. Assume, for example, that the file named DSKOUT has 10 extents. To reserve space for information about these extents, you code the LFD statement as follows: II LFD DSKOUT,1G The space acquired by using this parameter influences the total main storage requirement for the job. If you specify a value of zero, job control does not reserve main storage for extent information. If you omit this parameter, main storage sufficient for information about eight extents is reserved. The maximum value you can specify for this parameter is 20. 4-44 7004 4623-000 Getting the Most Out of the Basic Job Control Statements Ifyou specify a greater number of extents on the LFD statement than a file actually has, main storage is used unnecessarily for the extent information. Although this should be taken into consideration, problems are more likely to arise ifyou specify fewer extents on the LFD statement than the file actually has. Note: Specifications for Existing Files The third parameter of the LFD job control statement provides five different options: INIT, EXTEND, PREP, IGNORE, and ID. The INIT option is used to initialize an existing disk file; that is, INIT causes all information except the allocated space and file identifier to be discarded when the program using that file opens it. When you specifSr INIT for an output file, the output will start at the beginning of the file. When INIT is specified for an input file, an endof-file will be indicated when your program reads the first record. You can specifSr INIT for all disk and diskette files. Suppose you already reserved for the old file rather than allocate a new one? In this way, you are not leaving dead space on the disk volume. We’ll assume that the file name is SORTOUT. The device assignment set to reuse WORK2 on disk volume DPSO28 would look like this: II If If II DVC VOL LBL LFD 50 DSPO28 WORK2 SORTOUT,,INIT Notice the logical unit number for the DVC job control is 50. This indicates any disk device can be used. Also note the absence of an EXT job control statement. It wasn’t needed; specifications for the new file are the same as the old one. Note: The INIT parameter must not be used for a file that contains checkpoint records. The use of this parameter causes writing to begin at the start offile every time you log a checkpoint record to the file, thus overwriting any checkpoint records already existing on the file. The EXTEND option allows you to add information to the present end of an existing output file if the instructions in your program allow you to do so. EXTEND has no effect on input files. You can specify EXTEND for tape files; EXTEND logically does not affect disk and diskette files. Suppose you allocated four cylinders for your file, but filled only two cylinders with information. Now, you have more information to add to this file, and your program allows you to do so. You must also instruct job control that you intend to do this. 70044623-000 4-45 Getting the Most Out of the Basic Job Control Statements If the file name were ADDON, you could extend the file like this: II LFD ADDON,,EXTEND Remember, whether or not you can actually extend a file depends on the instructions given in your program. In COBOL, for example, an OPEN OUTPUT statement does not permit file extension even if you specify the EXTEND parameter on the LFD statement. The IGNORE option lets you specify that a file is an optional file. This means you can decide at job execution time, without having to change the program, whether accesses to the file should be processed or ignored based on the file resources that are available. This option should be used only with consolidated data management. It is ignored if specified for a file that is accessed using basic data management (including SAT files). When the IGNORE option is specified, the following status is returned to the executing program: • File initialization (OPEN) successful status • Input operation end of file (EOF) indication • All other operations successful status (request is ignored) - - - Use this option when a program reads or writes multiple files and it is not necessary that all of the files be accessed. For example, a program updates some files and. produces a report, but the report is not always needed. You would specify IGNORE in the II LFD statement of the printer device assignment set. Another example is where the program reads multiple input files, but one of them is not available at the time and is not essential to the execution of the program. When this option is specified for an input file, the program should be performing sequential retrieval; otherwise, it may not be expecting an EOF indication. Indicating Where the Load Module Is Located An EXEC job control statement is required to call a load module and initiate execution. Once again, the format is: Il[symbol] EXEC program-name (j I L Ilibrary-name 1 1,[)switchpriority]1,ABI4ORM=tabet] $Y$RUW [.$Y$LOD The second parameter indicates the name of the library (on disk) containing the load module. This can be either $Y$LOD, $Y$RUN, or the LFD name of the alterna te load library you have previously specified in the control stream. C 4-46 70044623-000 Getting the Most Out of the Basic Job Control Statements As you can see, the shaded default option is $Y$LOD. This is where you would store most of your programs. When you omit the second parameter, $Y$LOD is searched. If the load module is not found here, then the job’s $Y$RUN file is searched. Another choice you have is the job’s $Y$RUN file, which is where the linkage editor stores your load module if you have not indicated a specific library. You would code $Y$RUN in the EXEC job control statement if you have a load module with the same program name in $Y$LOD. Let’s assume that you have a load module named PAYROL in $Y$LOD and that you want to make some changes to this program. Take the source deck, make the necessary changes, and compile it with the same program name: PAYROL. When it comes time to execute, the system is told that the load module to fetch is PAYROL. Without specifying the library name on the EXEC job control statement, the default ($Y$LOD) is assumed, so the system fetches the PAYROL load module from $Y$LOD. But, you wanted the one from the job’s $Y$RUN file. You are going to receive the wrong load module. So, in this case, you had better indicate that you want to fetch from the job’s $Y$RUN file. Remember, the job’s $Y$RUN file is only a temporary file. Any load module you store here is available only during that job. Let’s say your load module is named PAYROL and it is loaded in the job’s $Y$RUN file. It would be coded as follows: .11 EXEC PAYROL,$YSRUN If the load module cannot be found in the job’s $Y$RUN file, $Y$LOD is searched to see if it was stored there. The remaining choice for this parameter, library-name, is used when the load module is stored in a private load library of your own. if you do this, you must define this library in a device assignment set, and the library-name must agree with the file name on the LFD job control statement. Normally, if the module is not found in this library, $Y$LOD and then $Y$RUN are searched. If, however, you specify NSRCH on the OPTION job control statement, only the library named on the EXEC statement is searched for the load module; $Y$RUN and $Y$LOD are not searched. (See “Selecting Optional Features” in Section 6.) Let’s say the load module is named PAYROL, and it is stored in a library with a file identifier of PAYLIBRARYMAST, on disk volume DISKO1. You used PAYLIB as the file name on the LFD job control statement, and, as the file identifier on the LBL job control statement, you would, of course, have to use PAYLIBRARYMAST. The device assignment set and the EXEC job control statement would be coded as: II DVC 50 II VOL DISKO1 1/ LBL PAYLIBRARYMAST // LFD PAYI..[B < 1iEXC:PAYRQL,PAX LIB 7004 4623-000 4-47 Getting the Most Out of the Basic Job Control Statements If this library is not accessed by your program (if it is only accessed by the system to obtain the load module named on the EXEC job control statement), the file name on the LFD job control statement need not agree with any specification within your program. It serves only to associate the library in the device assignment set with the library on the EXEC job control statement. As the file name on our LFD job control statement, we could have used any name as long as it agrees with the specification on the EXEC job control statement. If the load module is not located, $Y$LOD and then the job’s $Y$RUN file is searched. Task Switching Priority The EXEC job control statement is also used to specify task switching priorities. This synchronization and rotation of central processor control from task to task is a function of the supervisor, and is described in the Consolidated Data Management Programming Guide, UP-9978. The switch-priority is the third parameter of the EXEC job control statement. The priority you specify can be an absolute value ranging from 1 to 60, with the lower number representing the higher priority (1 is the highest priority). Assume, for example, your job has one step and you want a switching priority of 10 assigned to the specified program. (The load module name for the program-name is SWITCH and it is stored by default in $Y$LOD.) You could code the EXEC statement as follows: 1/ JOB MYJOB ii EXEC SWITCH,,1ø You can also specify a relative value such as +3 or -3 to change priority for a program specified in a particular job step with respect to the job’s overall priority (as set, for example, by a SWITCH operator command or an OPTION PR! job control statement). When specifring priorities this way, remember that a plus (+) value decrements the overall assigned value. This results in a higher task switching priority. A minus C-) value increments the overall assigned value. This results in a lower task switching priority. 4-48 7004 4623-000 Getting the Most Out of the Basic Job Control Statements Suppose you code the following: II JOB MYJOB /1 OPTION PRI=7 Assigns an overa(L task switching priority of 7 to each program. // EXEC PROG1 • if EXEC PROG2 The programs specified in these 2 job steps have a task switching priority of 7. 1/ EXEC PROG3,,+2 The program specified in this job step has a task switching priority of 5. If EXEC ORIG4,,3 • • ii EXEC PROG5,,-4 The program specified in this job step has a task switching priority of 3. The program specified in this job step has a task switching priority of 11. I& The OPTION PRI job control statement is discussed in “Selecting Optional Features” in Section 6. If you omit a task switching priority, the lowest available priority (the highest number) is used. You should understand that the task switching priority specified on the EXEC job control statement is only the initial switching priority for that job step. There are two ways it can be changed during the job step: • The operator can raise or lower the priority using the SWITCH console command if ajob is getting too much or too little CPU time. • The program itself may raise or lower its priority using the CHAP (change priority) macroinstruction. This function is described in the Consolidated Data Management Programming Guide, UP-9978. As you can see, the effect of the switching priority really depends on the task switching priorities specified for other jobs running at the same time as your job. Your job will not gain any advantage by specifying a task switching at priority of 1 (the highest priority) if all other jobs also use priority 1. There is a case, however, where the assigned switching priority is particularly significant. Recall from Section 1 that the RUN syrnbiont is one portion ofjob control that reads and analyzes job control streams. Tl)e RUN symbiont is only one of many OS/3 symbionts that perform system functions, usually in response to operator console commands. Normally, all symbionts run at priority 0, i.e., higher than any user job. A SYSGEN option, however, allows 70044623-000 449 Getting the Most Out of the Basic Job Control Statements the supervisor to be configured so that all symbionts run at some lower (user) priority. For example, suppose symbionts run at priority 2 under your supervisor. The only jobs that should be run with task switching priority 1 would be those that are extremely time-critical and cannot tolerate the loss of CPU time whenever a symbiont is active. Other jobs should be run at priority 3 and lower. Avoiding Abnormal Termination due to Program Errors The ABNORM=label keyword parameter of the EXEC job control statement is used to bypass job control statements if your program contains errors that may cause the job to abnormally terminate. If the program has such errors, control of the job skips to the statement whose label you specify in this parameter so that the job’s execution can continue. Any subsequent action depends on the contents of the target job control statement. A more specific example for using this parameter is given in “Bypassing Job Control Statements to Avoid Abnormal Termination” in Section 6. For now, just remember that ABNORM=label is a keyword parameter, not a positional parameter, and, therefore, may be coded in any position. For example: /1 EXEC MYPROG,ABNORM=ERROR Also remember that the operator can still cancel (normally terminate) your job even though you specify this parameter. The Job Control Language So Far We have now covered the job control statements you’ll probably use most frequently for your jobs. Section 5 deals with system JPROCS provided in the basic OS/3 software package. Their use eliminates the need of repeatedly coding a series ofjob control statements that perform a specific function. 7 C 4-50 7004 4623000 Section 5 Doing It the Easy Way with Procedure Calls - What Is a Procedure? Have you ever heard someone say: “I’ve made that mistake before. There must be some way, some procedure, to make sure it won’t happen again”? Common errors are: keystroke errors, forgotten commas, statements out of sequence, ete. errors that occur because of repetition rather than unfamiliarity. If we could reduce the number ofjob control statements coded, the bulk of these errors would also be reduced. What is needed is a procedure that allows you to write a series ofjob control statements, store them for later use, and, by writing a single job control statement, call in these job control statements whenever needed. - This procedure exists it allows you to write and call your own procedures, or to call procedures supplied by Unisys. In Sections 6 through 9, you’ll learn how to write, store, and call your own procedures. This section discusses how to use procedures supplied by Unisys. These procedures are called by job control procedure call statements (JPROC calls) in the control stream. Each JPROC call generates a readyto-use set ofjob control statements. Optional parameters in the JPROC call line enable you to tailor the job control statements generated to suit your needs. (See “Job Control Procedures” in Appendix C for a complete listing of JPROCS.) - When you use more than one JPROC call, keep this in mind: only one JPROC call can appear on a single card. JPROC calls can be part of a multistatement line of coding, but • It must be the only JPROC in the line. • It must be the last statement on the line. You can code this: II job control statement If jproc call but not this: II jproc call. II jproc call and not this: II jproc call 7004 4623-000 If job control statement 54 Doing It the Easy Way with Procedure Calls - Setting Up Temporary Work Files Temporary work files are used extensively by programmers to store intermediate processing results and data that will only be used in a particular job or job step. Depending on file characteristics and the device used, from three to five job control statements are needed in the device assignment set for each temporary work file. The WORK and TEMP JPROC calls allow you to generate any device assignment set needed for temporary work files. The difference between the two JPROCS is that WORK sets up temporary files for one job step and deletes them at the end of the job step. TEMP sets up temporary files for the duration of the job, deleting them at the end of the job. WORK and TEMP also generate different default file name values we’ll explain these in a moment. - The format for WORK and TEMP is: //[Lfdname] IWORKn1 lTEMI’If DVC=rin,VOL= VOL= [EXTSP= vol-ser-no RES RUN voL-ser-no RES RUN {}i f I BLKnnnn BLK=4000 CYL=nn 1 [TYPE= {fite.tYPe} [SECALL= {n} 1 Suppose your assignment is to write a program that reports the grades for each student in the local school district. The program must list each student’s name, grouped by school, in descending grade order. The disk area that stores the data used to calculate the order will never be used again once the job step terminates an ideal candidate for a temporary file created by WORK - Ignoring all optional parameters, the basic WORK JPROC call is: II WORKn 5-2 7004 4623.000 Doing It the Easy Way with Procedure Calls - Where n is a number in the range 1 through 10. Up to 10 temporary work files can be set up for each job step (or job, if you’re using TEMP). If no specific device or volume is requested, the file is allocated on either SYSRES or the job’s $Y$RUN file; oddnumbered files go to SYSRES and even-numbered files to $Y$RUN. So, if you want one temporary file allocated on the job’s $Y$RUN file, for the duration of the job step, you would code the following: 1/ WORK2 These job control statements would be generated: II /1 If /1 DVC EXT LBL LFD RUN ST,,1,BLK,(256,4000) $SCR2,16 $SCR2 We’ll discuss the generated EXT statement in conjunction with the BLK, EXTSP, and TYPE parameters. For now, it’s sufficient to know that 4000 blocks, each 256 bytes long, are allocated by default. The lfdname parameter of WORK and TEMP supplies a file name for the generated job control statements. It is one to eight alphanumeric characters in length. The file identifier on the LBL statement generated by WORK is always prefixed by $SCR, which identifies job step temporary (scratch) files. The number after $SCR corresponds to n in WORKn. If you omit the lfdname parameter of the WORK JPROC call and code the following: II WORK1 the generated statements are: II LBL $SCR1 1/ LFD $SCR1 The file name in your program must also start with $SCR. In addition, you must use the same WORK JPROC call each time the program is run. If the JPROC call is changed toll WORK7, for example, the file name in your program must be changed to $SCR7. 70044623-000 5-3 Doing It the Easy Way with Procedure Calls - For TEMP, unlike WORK, the generated file identifier is $JOB if you omit the lfdname parameter. Therefore, if the file name in your program begins with $SCR, you must use the lfdname parameter of the TEMP JPROC call, like this: //$SCR1 TEMP 1 to generate: /1 LBL $JOBI /1 LFD $SCR1 If you had not used the lfdname parameter in this example, the generated file name would have been $JOB1, which would not have matched the file name in your program. You can have the control statements generated by WORK and TEMP listed by specifying the P option on the JOB statement. If you have spooling in your system, the control statements will be printed in the job log. Otherwise, they will be displayed on the system console. When the job step terminates, all temporary files created by WORK are scratched. Files created by TEMP are scratched at the end of the job. The lfdname parameter can also indicate a file’s function when using the WORK JPROC call. For example, if you code //GRADEOUT WORK2 the generated job control statements are: 1/ /1 II If DVC EXT LBL LFD RUN ST,,1,BLK,(256,4000) $SCR2 GRADEOUT It is easier to remember what GRADEOUT contains than it might be to remember what $SCR2 contains. The remaining optional parameters of the WORK and TEMP JPROC calls are keyword parameters. if you are unsure of the rules for coding them, turn to Appendix A to refresh your memory. 5-4 70044623-000 Doing It the Easy Way with Procedure Calls - Notes: 1. Work file labels ($JOB and $SCR) are modified to be unique for the job by inserting a job-id after the first 4 bytes of the label. This enables all residual work files (for example, work files not scratched when an HPR occurs) to be cleared from the disk during IPL. 2. Within user JCL, work file labels (those starting with $JOB or $SCR) cannot exceed 39 characters. Using Your Own Volume By default, temporary work files are allocated on SYSRES or $Y$RUN. But what if you needed several work files and there isn’t enough available space on these volumes? In this case, you would use your own volume by specif’ing the VOL parameter. Building on our last example, if your own volume is DISKO1, you would code: //GRADEOUT WORK2 VOL=DISKØ1 This device assignment set is generated: II: PVC .0 I/ VOL DLSKØI if EXT ST,,1,BLK,(256,4000) II LBL $SCR2 II LFD GRADEOUT Note that the logical unit number generated for the DVC job control statement is 50. The WORK and TEMP JPROCS automatically assign the first available logical unit number in the range 50 through 59, but you can use the DVC parameter to assign another logical unit number selected from Table A-i in the Job Control Programming Reference Manual, UP-9984. In order to avoid a conflict, for example, you may want to assign a different logical unit number to the temporary work file if youve already assigned DVC 50 to a disk volume in your job control stream. Suppose we select logical unit number 60 (indicating any 8419 disk) and add the DVC parameter to our example, like this: //GRADEOUT WORK2 VOL=DISKØ1,DVC=60 Since DVC and VOL are keyword parameters, they do not have to be in any specific order. So, it could be coded: J/GRADEOUT WORK2 DVC6O, VOLDI SKø1: 7004 4623-000 5-5 Doing It the Easy Way with Procedure Calls - Either of these two JPROC calls generate these job control statements: iI:DVcø ii VOL DISK1 II EXT ST,,1,BLK,(256,4@øø) II LBL $SCR2 II LFD GRADEOUT You can use the VOL parameter and omit the DVC parameter job control will assign a logical unit number. The converse is not true; if you use the DVC parameter, you must use the VOL parameter. - Providing the Extent Specifications When the WORK or TEMP JPROC calls allocate temporary work files, they are, by default, 4000 blocks each 256 bytes long. However, you can change this by using the BLK parameter or the CYL parameter. - Possibly, your file doesn’t require 4000 blocks. Maybe you only need 1000 blocks. Don’t tie up 3000 blocks that your program isn’t going to use. Use the BLK keyword parameter to indicate that only 1000 blocks are needed: //GRADEOIJT WORK2 DVC=60,VOL=DISKO1,BLK=1@OO which would generate these job control statements: //DVC6Ø II VOL DISKØ1 II EXT ST,,i,BLK,(256,1øøø) II LBL SSCR2 II LFD GRADEOUT Suppose you want to allocate 3 cylinders for the file instead of 1000 blocks. In this case, specify the CYL parameter in the JPROC as follows: //GRADEOUT WORK2 DVC=60,VOL=DISKG1 ,CYL=3 This JPROC generates the following job control statements: 1/ /1 II II ii DVC VOL EXT LBL LFD 60 DISKO1 ST,,1,CYL,3 $SCR2 GRADEOUT C) 5-5 7004 4623-000 Doing It the Easy Way with Procedure Calls - In “Reserving an Extent Information Storage Area” in Section 4, we used the second parameter of the LFD job control statement to tell the system how many extents existed in the file. Job control used this to calculate the amount of main storage needed to contain the information about the extents. For the WORK and TEMP JPROC calls, you do this with the EXTSP keyword parameter. When the number of extents is omitted, 16 is assumed. If you know your data will take less than 16 extents, it’s a good practice to specify the EXTSP parameter. For example, your data may only need one extent; it is foolish to let the system allocate 16. Assuming only one extent, we would code: //GRADEOUT WORK2 DVC=60,VOL=DJSKO1,BLK=1000,EXTSP=1 These statements would be generated: ii II II II If DVC VOL EXT LBL LFD 60 DISKO1 ST,,1,BLK,(256,1000) $SCR2 GRADEOUT,1 In “Your Disk or Format-Label Diskette File Needs More Space” in Section 4, we discussed the dynamic extension of a disk file. You can indicate how much additional area to allocate on the WORK and TEMP JPROC calls, too. Use the SECALL keyword parameter. In the grading report, we estimated 1000 blocks were needed for 5000 students. If this amount is exceeded, you will, by default, receive one additional cylinder. The dynamic extension process takes a little time, which increases processing time. Normally, one additional cylinder is enough extra space to contain any additional information, but, at different times in the school year, you are called upon to do the grading report for a neighboring school district. This district has 15,000 students. This will no doubt exceed the 1000 blocks, and the overflow of data will take up more than one cylinder; it will be closer to five cylinders. Job control will keep on dynamically extending the file, in increments of one cylinder, until the needed space is acquired. Since each dynamic extension takes time, why not request that the extension be made all at once, by increasing the dynamic extension amount? This additional space is only allocated when needed (and most times you run this job, dynamic extension will not be needed). The relative cost of extra temporary space acquired infrequently, by dynamic extension, is minimal compared with the processing time cost required to allocate one cylinder five times. Since you know when the special runs for the other school district will occur, they can be scheduled when the use of these five additional cylinders will not hinder jobs being run. 70044623-000 5-7 Doing It the Easy Way with Procedure Calls - Let’s add a 5-cylinder dynamic extension to the example we’ve been using: //GRADEO(JT WORK2 DVC=60,VOL=DISKO1,BLK=1000,EXTSP=11,SECALL=5 This generates these job control statements: II /1 II II II DVC VOL EXT LBL LFD 60 DISKO1 (256,1000) 1 ST,,5,BLK $SCR2 GRADEOUT,1 You should now be able to use the WORK and TEMP JPROC calls and tailor them to your own needs. By default, both the WORK and TEMP JPROCS set up temporary SAT files, but you can also specify MIRAM files (MI) using the TYPE parameter: For example, we can include the TYPE parameter in the previous example to indicate a MIRAM file type. Code the JPROC as follows: 1/ GRADEOUT WORK2 DVC=60,VOL=DISKG1 ,BLK=2000,EXTSP=11 ,SECALL=5 , TYPE=MI This generates the following job control statements: II /1 II II /1 DVC VOL EXT LBL LFD 60 DISKO1 MI,,5,BLK,(256,1000) $SCR2 GRADEOUT,1 Accessing Previously Allocated Files Ordinarily, to access a previously allocated disk file, you use the DVC, VOL, LBL, and LFD job control statements. These statements aren’t needed, however, if you use the ACCESS JPROC call. Its format is: //tf&rnme ACCESS lb(name {(LbLname[ [ , OVC=nn,VOL= votsn [{voL= {votsn} {RUN {EXTEND}} } }1 This JPROC call can be used to access any tape or previously allocated disk file, except a multivolume file. For instance, to access multivolume files, a file serial number must be specified (otherwise, data management returns an error indication). There is no parameter in the ACCESS JPROC call for this specification. C 5.8 7004 4623000 Doing It the Easy Way with Procedure Calls - The ACCESS JPROC call uses both positional and keyword parameters; if you’re a little hazy on the rules for coding, consult Appendix A. Let’s digress a moment, and discuss the DVC and VOL parameters. The rules governing their use are exactly the same as for the WORK and TEMP JPROC calls. See “Using Your Own Volume” in Section 5. If you omit the VOL parameter, the file is assumed to be on the volume containing the job’s $Y$RUN file. Let’s set up a situation where the ACCESS JPROC call can be used to advantage. Suppose we want to write an inventory control program for a metal fabricating plant. This plant produces many different items: office furniture, aircraft parts, aluminum siding, and such. Each item produced depletes a central metal inventory, and the purchasing agent wants to know when to order new stocks of metals. After making some further assumptions (DVC=60 and VOL=DKWORK) we have the information needed to code a useful ACCESS JPROC call: I/MM I F IL ACCESS METALMAST I NV, DVC=60,VOL=DKWORK This ACCESS JPROC call generates this device assignment set: If II II II DVC VOL LBL LFD 60 DKWORK METALMASTINV MMIFIL The ACCESS JPROC call has two optional positional parameters that allow you to generate a complete LFD job control statement. In “Specifications for Existing Files” in Section 4, we discussed how the optional parameters of the LFD job control statement are used. Well, the optional positional parameters of the ACCESS JPROC call correspond exactly to the parameters of the LFD job control statement. Compare these formats: f/Esymbol) LFD //Lfdname ACCESS ffilename 1 [*f[enamef (bI.narne {tbtn F 11J [nllE L L [{}1E [EXTEND uNIT ) {EXTEND}1 } , DVCnn,VOL= [{V0L { }} voLsn The two enclosed portions are identical, both in format and function. 7004 4623.000 5-9 Doing It the Easy Way with Procedure Calls - The n parameter specifies the number of extents reserved in main storage, and the default value is 8. The other optional positional parameter provides two different options: EXTEND and INIT. As a brief recap of “Specifications for Existing Files” in Section 4, we can say that using the EXTEND option allows you to add information to the present end of the file. With the INIT option, you can write over the existing information in the file (except for the file identifier). When you code any of these options, or specify the number of extents in the file, with the ibiname parameter, you have to enclose them all within parentheses. Since the metal fabricating plant buys and sells a lot of materials, the metal master inventory file changes a great deal. You must update the metal master inventory file to reflect any new materials purchased and sold, and perform the main processing function. All new material is purchased on the tenth of the month. On the eleventh, it’s time to add the new material to the metal master inventory file. Our call line would look like this: //MMI F IL ACCESS METALMASTINV,DVC=60,VOL=DKWORK By default, space is reserved for eight extents. The following device assignment set is generated: // DVC /1 VOL II LBL /1 LFD 60 DKWORK METALMASTINV MMIFIL While there are more minor limitations to the ACCESS JPROC call, there are many instances where it’s very useful. Allocating a File with a JPROC Call You saw how we used the ACCESS JPROC call to access an existing disk file. This replaced four job control statements, helping to reduce the possibility of coding errors. You save more coding time by using the ALLOC JPROC call to allocate disk and diskette files. It’s a combination of the ACCESS JPROC call and the EXT job control statement. 5-10 7004 4623-000 Doing It the Easy Way with Procedure Calls - The format is: //lfdname ALLOC tb(name (tb[name Ij [nil 1 {F11 {11 votsn RUN * 7 IEXTEND1 T 11 Ll1JL1INI EXT DVC=nn,VOL VOL= volsn ) L Tccc:hh TBLK CYL TRK OLD * [ {i,af)}1 IJ u,aj)I1 L J fmj ,..iE,0LD]E,FIX)E,ND1)) The EXT keyword parameter provides all the options available as positional parameters on the EXT job control statement. The only difference is the equal sign and the parentheses. Note: Section 4 describes the parameters and options available for data-set-label and format-label diskette using the EXT statement. Your site processes payrolls for 25 different companies. Each company has a file containing each employee’s name and hourly wage. This file is accessed during the processing of the company payroll (a use for the ACCESS JPROC call). Originally, though, each company file was on punched cards, and each of them must be loaded into its own disk area. (Here is one use for the data utility card-to-disk routines;. why write your own program when one is already provided?) To do this, there must bea device assignment set for each file being created. This means 25 device assignment sets for the 25 files. Looking back at “Basic Job Control Statements” in Section 3, we see that the site manager needed five job control statements to allocate his disk file: DVC, VOL, EXT, LBL, and LFD. This means 125 job control statements would be needed. The ALLOC JPROC reduces this to 25. For our example, assume that the file requirements (such as access method area needed, etc.) are identical for each of the 25 files, so most of the parameters for the job control statements (and the ALLOC JPROC call) would be the same. Of course, each file must have its own unique file identifier, but the information about the extents is the same, all the files can be stored on the same disk volume, and, since you’re using the same program to store them (the data utility routine, run 25 times), the file name is the same. 70044623-000 5-11 Doing It the Easy Way with Procedure Calls - We’ll assume that disk volume DSPO28 will hold these files. It’s the only volume with DSPO28 as the volume serial number, so a logical unit number in the range of 50 through 59 (any disk device) suffices. If we omit the DVC keyword parameter, job control assigns the first available number in this range. Assume that the first one available is 50. The data utility card-to-disk routine uses OUTPUTI as the file name in the LFD job control statement; this is the value we must use as the ibiname parameter. All the file names for the different data utility routines can be found in the Data Utilities Operating Guide, 7004 4516. We are going to take the default value for the number of extents (8), and we don’t want to use any of the options for a previously allocated file. After defining the extent information, we’ll have the parameters that are common to all files. The only thing left will be to supply a unique file identifier for each file. AU the files are MIRAM files (which is a default condition, MI), allocation is contiguous, with one cylinder for dynamic allocation. The initial allocation is two cylinders. Now we have what we can call our master ALLOC JPROC call for the 25 different files. The only thing missing is the file identifier. From the information we’ve gathered, our master ALLOC JPROC call for the file identifier would look like this: //O&JTPUT1 ALLOC xx...xx,VOL=DSPØ28,EXT=(,C,i,CYL,2) Now, we need file identifiers for each file. Each of the 25 files must be given a unique file identifier so the proper file can be accessed at the proper time. The names of two of the companies are Target Manufacturing, Incorporated, and the Reality’s Dress Company. Why not use TARGET and REALITYS as the file identifiers? It makes them easier to remember and identify. The ALLOC JPROC call for Target Manufacturing, Inc., would be: //OUTPUT ALLOC TARGET,VOL=DSPØ28,EXT=(,C,1,CYL,2) and the generated job control statements would be: // DVC 50 // VOL DSPO28 II EXT ,C,1,CYL,2 If LBI TARGET If LFD OUTPUT The ALLOC JPROC call for the Reality’s Dress Company would be: //OUTPUT1 ALLOC REAL[TYS,VOL=DSPO28,EXT=(,C,1,CYL,2) The only difference in the generated job control statements is the file identifier of the LBL job control statement: one is TARGET; the other is REALITYS. 5-12 70044623-000 Doing It the Easy Way with Procedure Calls - Note: If the EXT keyword parameter is omitted, job control assumes one cylinder for dynamic extension and, therefore, allocates one cylinder of extent space for a MIRAM file. Now, let’s see how to avoid the error of assigning one volume to different devices. Too Many Devices for the Same Volume Many applications use two files on the same volume. A common mistake is to assign the files thus the volume to two different devices during the job. Using the DVCVOL JPROC helps to avoid this. This JPROC assigns logical unit numbers for the generated DVC job control statements. It also generates a VOL job control statement with the volume serial number you specify in the JPROC call. The format is: - - //[symbol) DVCVOL [vo1ser-no RES IRUN [,Lun][NOVOL= y [ iN The symbol in the label field is only used as a target for the job control statement that causes a branch. The DVCVOL JPROC assigns the logical unit numbers 50 through 59, in ascending sequence, to the different volume sequence numbers in the order they are encountered in the control stream. If you had three volumes, A, B, and C, in that sequence, A would be 50, B would be 51, and C would be 52. It is possible, however, to override these volumes and assign a specific logical unit number to a specific volume by using the lun parameter. The NOVOL parameter (NOVOL=Y) performs the same function as the NOV parameter of the VOL job control statement. It suppresses the checking of volume serial numbers. Once a logical unit number is assigned by the DVCVOL JPROC call to a ‘‘olume, the same logical unit number is assigned whenever this volume is encountered in the job. If volume A was assigned 50 in one job step, and you tried to assign it to 51 in the next job step, the system overrides the 51 and assigns 50. If you tried to do this by using just the DVC and VOL job control statements, assigning 50 in the first job step and 51 in the next job step, your job may run, but you may have to demount the volume from DVC 50 and mount it on DVC 51. When you use the DVCVOL JPROC call, the LBL and LFD job control statements for the file must be present in the control stream after the DVCVOL JPROC call. If you’re allocating a file on a disk volume, the EXT job control statement must, of course, also be used. 7004 4623-000 5-13 Doing It the Easy Way with Procedure Calls - There is a limit to the number of volumes you can assign using the DVCVOL JPROC call inajob: 10. Another point worth remembering: the DVCVOL JPROC call can be a member of a multistatement line of coding, but it must be the last statement on the line. Let’s set up a control stream with some DVCVOL JPROC calls, and see what job control statements are generated. The numbers refer to the explanation following the example. /1 DVCVOL II LBL A II LFD A II LBL B II DVCVOL II LBL C II DVCVOL II LBL X II LFD X II DVCVOL //LBLY II LFD Y 1 2. 3. 4. 5-14 DISKØ1 If DVCVOL DSKØO2 If LFD B DKØOO3,69 ii LFD C DISKØ1 DKØOO3,67 1. This is an example of a multistatement line of coding. Note that the DVCVOL JPROC call is the last statement on the line. The next line and the line after example 2 are also multistatement lines. 2. This line assigns a specific logical unit number, 69, to the volume DK0003. 3. This DVCVOL JPROC call is used again for the volume DISKO1. It was also used in the first DVCVOL JPROC call on the first line. It will be assigned the same logical unit number assigned to the first call for the volume DISKO1. You’ll see this more clearly when we show the job control statements generated by these DVCVOL JPROC calls. 4. This is another example calling for the volume DK0003, which was already assigned a logical unit by a DVCVOL JPROC call. Notice that it also requests a specific logical unit number: 67. Since this volume already was assigned to logical unit number 69 in example 2, the request for logical unit number 67 is ignored, and it is assigned to logical unit number 69. 70044623-000 () Doing It the Easy Way with Procedure Calls - Here are the generated job control statements. They should give you a clearer picture of how each DVCVOL JPROC call functioned. 1. II DVC 50 II VOL DISKO1 1/ LBL A II LFD A IIDVC51 2 II VOL DSKOO2 ii LBL B II LFD B 3 //DVC69 VOL DK0003 LBL C LFD C DVC 50 VOL DISKO1 LBL X LFD X DVC 69 VOL DK0003 LBL Y LFD Y II II II 1/ II II II II II II II 4. 5. 1. Volume DISKO1 was the volume encountered in the first DVCVOL JPROC call it’s assigned to logical unit number 50. The LBL and LFD job control statements are not generated by the JPROC call. Remember, these were supplied in the control stream. If another DVCVOL JPROC call for volume DISKO1 is encountered in this job, it is automatically assigned to logical unit number 50. - 70044623-000 2. A DVCVOL JPROC call for volume DSKOO2 was the next one encountered. It’s assigned the next available logical unit number. Since 50 was already assigned to volume DISKO1, 51 is the next available logical unit number. 3. The next DVCVOL JPROC call was for volume DK0003. Normally, it would be assigned to logical unit number 52, which was the next one available. But, the DVCVOL JPROC call for this volume requested a specific logical unit number, 69, so that’s what is assigned. 4. Another DVCVOL JPROC call for volume DISKO1 was encountered. Since this volume was already requested and assigned earlier in the control stream, this occurrence is assigned the same logical unit number: 50. 5-15 Doing It the Easy Way with Procedure Calls - 5. • The volume DK0003 was requested by another DVCVOL JPROC call. Even though a specific logical unit number, 67, was requested, it was assigned to logical unit number 69, since this is the logical unit number assigned earlier in the job. The first number encountered is used, and any other logical unit numbers requested for the volume in the same job are ignored. To assign multiple diskette volumes through a JPROC call, use the DVCDKT JPROC. It functions the same as the DVCVOL JPROC except that it assigns the logical unit numbers 130 through 132. Its format is: //[syrnbol] DVCDKT voi.ser-no[,Lun)FNOVOL= L r’’ There is also a JPROC call for tape units: DVCVTP. Except for a few minor differences, it functions the same as the DVCVOL and DVCDKT JPROCS. Its format is: Illsymbol) DVCVTP vol.ser.noEftun][PREP= {Y} 1 [NovOL= ç} The DVCVTP JPROC call assigns the logical unit numbers 90 through 99. Additionally, DVCVTP has the keyword parameter PREP=Y. If specified, this parameter functions the same as the PREP option of the VOL job control statement (“Ignoring or Changing the Volume Serial Number” in Section 4); it causes any information currently on the tape volume to be effectively erased. Using the Linkage Editor So far, we’ve discussed how to execute programs stored in a library. These programs were not always located in this library. At one time they could have been on punched cards in one of the programming languages, such as COBOL or RPG II. These programs are compiled or assembled using a language translator, which converts the program instructions into a form understandable to the computer (an object module). Each language translator has a JPROC call you can use to generate the job control statement needed to direct the operation of the language translator; in other words, you get an object module from source input. The JPROC call for each language translator can be found in the appropriate assembler, COBOL, FORTRAN, and RPG II publications. In this guide, we’ll explain the JPROC call for the linkage editor. But, before we do, a word or two about the linkage editor. 5-16 70044623.000 Doing It the Easy Way with Procedure Calls - The linkage editor converts an object module into an executable load module. Only load modules can be executed, and the only method of converting object modules to load modules is by using the linkage editor. The function of the linkage editor is fully covered in the System Service Programs (SSP) Operating Guide, UP-8841. The format of the linkage editor JPROC call is: JLINK 1LINKGI rPRNTR= I L [IN= [RLIB= L N[,dest] 20[,dest] (vol-ser-no, label ) (RES) (RES, label) (RUN, label) (*, label) (RUN $Y$RUN) ,OIJT= (voL-ser-no,tabet) (RES, Label) (RUN, Label) (*, I abet) (N) (vol-ser-no,Label) 1rALIB= (RES,tabel) (RUN, label) (* (abet) foil rscRl= fvo( ser J (vol -ser-no,L abet) (RES,L abet) (RUN, [abet) (*, Label) rsTD= [YES1 1 rALTL0D= L 1NO j U I L E,OPT=Ioptionsl][JCLIB= I I (vol ser no Label) (RES,label) (RUN,tabel) (*,[abel) (RUN,$Y$RUN) (vot-ser-no,LabeL,modname) (RES,Label,modname) (RUN, label ,modname) L E,CMT=’coment’ i[,ENTER=expression] 7004 4623-000 5-17 Doing It the Easy Way with Procedure Calls - There are two choices in the operation field: LINK and LINKG. By specifying LINK, you execute the linkage editor. By specifying LINKG, you execute the linkage editor and the load module you just created (without using an EXEC job control statement). As you can see, all the parameters are optional. But this JPROC call has default values, which generate the job and linkage editor control statements sufficient to accomplish a link edit, and assumes the following: All the object code you specifically want included in the load module is in the job’s $Y$RUN file. • Any object code that may have to be automatically included in the load module (such as error processing routines) is in $Y$OBJ. • The load module produced is given the name LNKLOD, and it’s stored in the job’s $Y$RUN file. You can alter these default conditions using the optional parameters. There are also parameters that allow you to choose special options (such as a specific printer, a certain scratch work file, etc.). Let’s see what job and linkage editor control statements are generated when you omit all the parameters. We’ll use both the LINK and the LINKG operations. For these examples, assume that the program was just compiled (or assembled) by a language translator, and the object code was placed in the job’s $Y$RUN file. This occurred in the last job step, but it is still the same job. The job’s $Y$RUN file is only a temporary file, lasting for the length of the job. So, if you placed the object code in the job’s $Y$RUN file in one job and tried to locate it in another job, you wouldn’t find it. /* (this is the end of the language translator job step) /1 LINK 1/ FIN Here’s what job control statements are generated: /* 1 3. 4. 5. F 1 /1 II II II II (this is the end of the language translator job step) DVC 20 II LFD PRNTR DVC RES EXT ST,C,1,BLK,(256,10) LBL $SCR1 /1 LFD $SCR1 EXEC LNKEDT /s i LOADM LNKLOD /& II FIN 5-18 70044623.000 Doing It the Easy Way with Procedure Calls - 1. This is the device assignment set that’s generated for the printer. Notice that we’ve used multistatement coding, showing the DVC and LFD job control statements on the same line. 2. The linkage editor always uses one scratch work area. The JPROC call assigns it to the SYSRES device, and makes it ajob step temporary file. (The file identifier begins with $.) This work area is scratched at the end of the job step. 3. This calls the linkage editor from $Y$LOD and initiates its execution. 4. The generated load module must be assigned a name. The default is LNKLOD. This is on the LOADM linkage editor control statement, which is treated as data by job control, thus the 1$ and /* job control statements. 5. As always, this indicates the end of the job. This example is fine if you don’t want to execute the program, since default conditions assign the load module to the job’s $Y$RUN file, which is only a temporary file. This load module is not available to another job (but it is to another job step in the job). This application is useful if you only want to see the output of the linkage editor; but it isn’t much help if you want to execute. This does not mean that you can never access a load module in ajob other than the one in which it was link edited. You can, but you have to assign it to a library other than the job’s $Y$RUN file. You’ll see how later on, when we discuss the optional parameters. But first, let’s see how to execute the load module that was placed, by default, in the job’s $Y$RUN file. There are two ways you can execute a load module placed in the job’s $Y$RUN file: first, you can execute it in a subsequentjob step after link editing, using the default LNKLOD load module name on the EXEC job control statement; or, second, you can use the LINKG operation, which automatically executes the load module. Here’s method 1 (LINK): /* (end of Language translator job step) II LINK 1/ EXEC LNKLOD,$Y$RUN I& II FIN 70044623.000 5-19 Doing It the Easy Way with Procedure Calls - The job control statements generated are: /* (end of language translator job step) II DVC 20 /1 LFD PRNTR /1 DVC RES II EXT.ST,C,1,BLK,(256,10) II LFD $SCR1 If LBL $SCR1 If EXEC LNKEDT Is LOAPMIN.KLPP 1* 1 [1 EXEC LNKL0DSYSRUN /& f/FIN The load module name on the LOADM linkage editor control statement and the program name on the EXEC job control statement is the same: LNKLOD. Since we know the linkage editor always assigns this as the default load module name, we use it as the program name. Also note that $Y$RUN is the second parameter on the EXEC job control statement. Remember, in “Specifring Qualifiers for File Identifiers” in Section 4, we said this parameter indicates the name of the library containing the load module. If omitted, $Y$LOD is searched and then the job’s $Y$RUN file. Since the job’s $Y$RUN file is searched eventually, why specify it? Time. We know, it’s in the job’s $Y$RUN file, so why search $Y$LOD needlessly? Go directly to the job’s $Y$RUN file. Now, here’s method 2 (LINKG): /* (end of language translator job step) II LINKG I& I/FIN And here are the generated job control statements: /* (end of Language translator job step-) 1.1 ..T[QN. GQ 1/ DVC 20 1/ LFD PRNTR II DVC RES If EXT ST,C,1,BLK,(256,10) II LBL $SCR1 If LFD $SCR1 II EXEC LNKEDT Is LOADM LNKLOD 1* /8 II FIN 5-20 70044623-000 Doing It the Easy Way with Procedure Calls - The only difference between this LINKG operation and the LINK operation is the generated OPTION job control statement. The GO means the load module should be automatically executed when linkage editing is completed. You don’t need an EXEC job control statement. The LINKG operation generates a load module name of LNKLOD and is loaded, by default, in the job’s $Y$RUN file. This means it is not available after the job is completed. The LINKG operation is useful when you’re testing programs or running programs that are infrequently used. So far, we’ve covered only the basic use of the linkage editor JPROC call. Now, let’s add some optional parameters and make it do exactly what we want. Generating LOADM and INCLUDE Linkage Editor Control Statements Up until now, the module name for the generated LOADM linkage editor control statement has been LNKLOD (the default name). You can override this using the label field of the JPROC call, shown as symbol in this portion of the format: IlEsymbot] fLINK tinput-moduLe-name-1,...,input-modute-riame-1ø) The symbol parameter is a 1- to 6-alphanumeric-character name. If fewer than six characters are specified, it’s padded on the right with zeros. If it’s omitted, the value for the first input-module-name specified is used for the load module name. If the input-module-name parameter is also omitted, LNKLOD is used. Since we mentioned input-module-name, now is a good time to explain it. This parameter allows you to specify up to 10 object modules to be included in the load module you’re constructing. In other words, it specifies the module names for the INCLUDE linkage editor control statements. Each input-module-name can be from one to eight alphanumeric characters long. If this parameter is omitted, the value specified as symbol is also omitted, all object modules residing in the job’s $Y$RUN file are included in the load module. An explanation of how the linkage editor JPROC searches for input modules to be included in the load module is given in the description of the IN parameter (see “Making the Linkage Editor Suit Your Needs” in Section 5). If you are specif’ing more than one object module name, you may want to specify a value in the symbol field that is representative of all the input-module-names to be included. Also, if all eight positions are used for the first input-module-name and it is also to be used as the symbol by default, the last two positions are truncated by the linkage editor to obtain a 6-character symbol, and the linkage editor diagnostic message K016 is issued. Let’s look at examples showing different ways of assigning module names for the generated LOADM and INCLUDE linkage editor control statements. 70044623-000 5-21 Doing It the Easy Way with Procedure Calls - Here’s the first example: /*(end of language translator job step) J/PROG LINK II EXEC PRC.3,$Y$RUN ii FIN Here’s what is generated: /* (end of language translator job step) 1/ DVC 20 1/ LFD PRNTR II DVC RES II EXT ST,C,1,BLK,(256,10) /1 LBL $SCR1 If LFD $SCR1 II EXEC LNKEDT /s LOADM PROG INCLUDE PROG 1* 11 EXEC PROG SYSRUN /S II FIN By using PROG as the symbol, you get PROG as the module name on the LOADM linkage editor control statement. By default, it’s also the module name for the INCLUDE linkage editor control statement. (You’ll notice there’s no space between II and PROG on the JPROC call.) You also use it as the program-name parameter on the EXEC job control statement. The same job and linkage editor control statements would have been generated if you specified it like this: /* (end of Language translator job step) II LINK PROG II EXEC PROd SYSRUN /& II FIN Notice that PROG, in this case, is specified as the input-module-name, rather than the symbol. Remember, one can substitute for the other if it’s omitted. You could make this job a little easier by getting rid of the EXEC job control statement, like this: /* (end of Language translator job step) II LINKG PROG /& /1 FIN 5-22 70044623-000 Doing It the Easy Way with Procedure Calls - The following subsections describe the rest of the parameters used with the linkage editor JPROC call, and present examples showing what job control statements are generated when you specify a particular parameter. Making the Linkage Editor Suit Your Needs Once again, the format of the linkage editor JPROC call is: //[symbol] fLINK [input-module-name-i 1LINKGI ,IN= input-moduIe-name-iØ]{PRNTR= tun[,dest) N[,dest] I L (vol-ser-no,labet) (RES) (RES, Label) (RUN, Label) Label) ,OUT= (*, Label) (N) RtJN,$Y*RUN ,RUN,$Y$RUN ERLIB= I I (vot-ser-no,labet (RES, label) (RUN, labeL) (vot-ser-no,label) (RES,tabeL) (RUN,Label) 1[ALIB L (voL-ser-rio,L abet) (RES, labeL) (RUN, Label) (*,LabeL) [SCR1= {vot.ser.no} 1 [STD= .[YE} 1 [ALTLOD= (vol -ser-no, I abeL (RES, label) (RUN, label) (*, label) RtJN,$T$RUN [,OPT=boptions9[CLIB= (vol-ser-no,LabeL,modname) (RES, Label ,modname) (RUN, I abet ,rno&iame) L [,CMT=’conwnent’ )[,ENTER=expression] 7004 4623-000 5-23 Doing It the Easy Way with Procedure Calls - We’ve already covered symbol and input-module-name, and the difference between LINK and LINKG. The remaining parameters are used to define particular input and output files, to indicate libraries to be searched for modules to be automatically included, to define scratch work areas, and to specify the alternate library that contains.the linkage editor (normally it’s $Y$LOD). If you want to assign a specific printer, there’s a parameter for that. And, if you are going to provide your own linkage editor control statements (you might want to do multiple link edits in a single job step), you must use a parameter to indicate this. Let’s start with the PRNTR parameter. If PRNTR=N is specified, the LINK JPROC does not generate a device assignment set for a printer. Also, it is assumed the PRINT file is not to be sent to a terminal. Remember, since no device assignment set is generated, you must supply your own. The lun subparameter is used if you want to assign a logical unit number for a specific printer (20 is the default, indicating that any printer can be used). The dest subparameter indicates the remote destination identifier (one to six alphanumeric characters) for the print output file when dealing with remote batch processing, which requires that every unit record device must have a destination. There may be times when you want to change the spooling environment, the standard load code, or the vertical format buffer used by the linkage editor. (These buffers are changed with the SPL, LCB, and VFB job control statements, described in “Controlling Spooled Output with a Job Control Statement”, “Specifying Unique Load Codes”, and “Using Forms Control” in Section 6.) This is accomplished by coding N as the value of the PRNTR parameter. When you code N, the JPROC will not generate a device assignment set for the printer; you must physically insert the printer’s device assignment set into the control stream before the JPROC call. This device assignment set consists of a DVC job control statement and an LFD job control statement (which must have a value of PRNTR for the file name). The SPL, LCB, or VFB job control statement you want to use is placed between the DVC and LFD job control statements. For example: II II II /1 II Note: 5-24 DVC 20 VFB LENGTH=78,OVF=75 SPL RETAIN LFD PRNTR LINK PRNTR=N Other JPROCS allow you to use the PRNTR=Nparameter and supply your own device assignment set for the printer. A.ll the language JPROCS and the JPROCS for generating control streams for data utility routines allow you to specify PRNTR=N. This parameter is used in these JPROS exactly as its described for LINK/LINKG. 7004 4623.000 Doing It the Easy Way with Procedure Calls - Next, let’s look at the parameter for the input file definition: ,IN= (vot-ser-no,tabeo) (RES) (RES, (abet) (RUN, (abet) ( 1) The linkage editor uses two processes to include modules specific and automatic inclusion. Modules specified in the input-name parameter and modules specified on embedded INCLUDE statements are specifically included. For each inp ut-modulename specified, the linkage editor performs a specific inclusion search in the following manner: If the IN parameter is specified, only the file it identifies is searched; if the IN parameter is not specified, first, $Y$RUN is searched for object modules to include. Then the file defined in the RUB parameter is searched (if the RUB parameter was specified) and, finally, $Y$OBJ is searched. - For automatic inclusion, the linkage editor performs a search in the following manner: The file defined by the ALIB parameter is searched first (if the AUIB parameter was specified), and then the file defined by the RUB parameter (or the default $Y$OBJ) is searched. Modules are automatically included to satisfy the external requirements of modules that have already been included by either automatic or specific inclusion. Automatic inclusion may be suppressed by specifying the NOAUTO option. Here are the options available to you through the IN parameter. The first option is IN=(vol-ser-no,label). The vol-ser-no is the volume serial number of the disk volume you’re using, and the label is the file identifier of the file used when the file was created. The next choice is IN=(RES). This means the file is on SYSRES in $Y$OBJ. The following two choices are very similar: IN=(RES,label) and IN=(RUN,label). In both, label stands for the file identifier. If you use RES, the file is on SYSRES; if you use RUN, the file is on the volume containing the job’s $Y$RUN file. (Remember, $Y$RUN can be on the SYSRES device.) The next choice is IN=(*,label). This means the file is cataloged; therefore, its location is obtained from the file catalog. The default parameter CR UN,$Y$R UN) should not be coded when you want to use the default; its use in coding can cause an invalid file name. Whenever you use the iN parameter, with both subparameters (vol-ser-no,label , for example), and STD=NO is omitted, an INCLUDE module-name/IN linkage editor control statement is generated. 70044623.000 5-25 Doing It the Easy Way with Procedure Calls - The next parameter we’ll discuss defines the output file. Here’s what it looks like: ,OUT= (vo(-ser-no,Iabel) (RES, Label) I Label) (* Label) (N) (PH., Quite frequently, you will not want to permanently save the generated load module, particularly when you don’t have all the bugs out of your program. However, once the program is working satisfactorily, you’ll probably want to save the load module, rather than compiling (or assembling) and link editing it every time you run it (unless it’s used only once a year, for example). This is done with the OUT parameter. As we’ve said, most times you don’t want to save the generated load module for any length of time (but you’ll probably want to execute it in the next job step to see how close to the finished product you are). For this reason, the linkage editor JPROC places the generated load module in the job’s $Y$RUN file by default. But, once the module is ready to be saved, you override the default in one of these ways. You can specify OUT=(vol-ser-no,label). This is the volume serial number and the file identifier of the file where you want to store the load module. The following two choices are similar: OUT=(RES,label) and OUT=(RUN,label). This is like the IN parameter we just discussed. label is the file identifier; .RES means the file is on SYSRES; RUN means the file is on the volume containing the job’s $Y$RUN file. The next choice is OUT=(*,label). This means the file is cataloged; therefore, its location is obtained from the file catalog. The last choice is OUT=(N). This means you don’t want to save the load module at all, not even for the next job step. When this option is used, all you get is a listing of the load module, which you can use for debugging. The generated load module is not placed in any file. Just as with the IN parameter, the default (RUN,$Y$RUN) should not be coded. Whenever the OUT parameter is coded, a PARAM OUT=OUT job control statement is generated to specify the linkage editor option that an output file has been defined for the load module. The PARAM job control statement is explained in Section 6. 5-26 7004 4623.000 Doing It the Easy Way with Procedure Calls - The linkage editor JPROC call assumes the output file is already allocated. If it isn’t, you must allocate the file by placing a device assignment set in the control stream before the linkage editor JPROC call. Let’s clarify this with an example. Suppose you want to store the load module on disk volume DISKO1, and you want it placed in the file identified by SAVEDPROGRAM. This file has never before been allocated. So, what you have to do is allocate the file before you can link edit the module. You’ve probably noticed that the logical unit number is not coded in the OUT parameter (or any other except for the printer). This is because the linkage editor JPROC call uses the DVCVOL JPROC call (a JPROC call within a JPROC call, which is in turn converted to DVC and VOL job control statements). In “Too Many Devices for the Same Volume” earlier in this section we explained how there can be conflicting device assignments and how the DVCVOL JPROC call eliminates this conflict. So, we’ll use the DVCVOL JPROC call in the device assignment set. The OUT parameter generates a file name of OUT for the generated LFD job control statement of the device assignment for the output file. So, we might as well use OUT as the file name when we allocate the file. (We don’t have to, since the program does not have to have a match for this file name; it’s only serving the purpose of completing the device assignment to allocate a file. Think of it as a job step in itselfi Remember that OUT is the file name used by the JPROC. In “Specifying Qualifiers for File Identifiers” in Section 4 we said that, if the load module is stored in a user library (a function of the OUT parameter), you have to use the file name of the device assignment set for this library as a parameter in the EXEC job statement. This will be a lot clearer in the example. First we start to allocate the file using the DVCVOL JPROC call. II DVCVOL DISKØ1 Next, an EXT job control statement. If EXT ST,C,3,CYL,1 Now the file identifier, II LBL SAVEDPROGRAM and then the file name that allocated the file. /1 LFD OUT Now, the Linkage editor JPROC call (Let’s call the load mobiLe XYZ), II XYZ LINK OUT=(DISKØ1,SAVEDPROGRAM) and execute the program. /1 EXEC XYZ,OUT — If the file is already allocated, the load module created is appended to the present end of the file. If a load module with the same name tlready exists in the file, it is replaced by the new load module. When you specify the LINKG operation, you can’t use the OUT parameter to define a specific output file. You must use the job’s $Y$RUN file. 70044623-000 5-27 Doing It the Easy Way with Procedure Calls - Next, the parameters RLIB and ALIB name libraries that contain object modules, such as your own (user-written) subroutines, for inclusion in the load module. To see exactly how and why different object modules are included into your load module, see the System Service Programs (SSP) Operating Guide, UP-8841. By default, the linkage editor searches $Y$OBJ for the needed modules for automatic inclusion processing. The ALIB parameter allows you to specifSr an additional file to be searched. This file is searched first. If all the needed modules are not found here, $Y$OBJ, or the file named by the RLIB parameter, is searched. The RUB parameter names the file to be searched before $Y$OBJ during specific inclusion processing, and in place of $Y$OBJ during automatic inclusion processing when no ALIB parameter is specified. Both the RLIB and AUIB parameters look very much alike: LRLIB= I I (voL-ser-no,Labet) (RES,labet) (RUN,Labe() L LALIB= I L (vol-ser-no,tabet) (RES,LabeL) (RUN,tabel) (*Lal,et) In RLIB=(vol-ser-no,label) and ALIB=(vol -ser-no,label) , you provide the volume serial number and the file identifier of the file containing the library you want. RLIB=(RES,label) and ALIB=(RES,label) are similar, just as are RLIB=(RTJN,label) and AUIB=(RUN,label). The label provides the file identifier; RES means the file is on SYSRES; RUN means the file is on the volume containing the job’s $Y$RUN file; the asterisk (*) means the volume is identified in the file catalog. Whenever you use the RLIB orALIB parameters, PARAM job control statements are generated to specify the linkage editor option for libraries for inclusion processing. These PARAM job control statements are: • PARAMRLIB=RLIB • PARAM ALIB=ALIB C 5-28 7004 4623-000 Doing. It the Easy Way with Procedure Calls - The linkage editor needs one scratch work file. Normally, SYSRES is used, but you can use a different volume: SCR1= [vot-ser-no 1RES This parameter, whether specified directly or indirectly through default, generates all the job control statements needed to allocate a job step temporary work file. The linkage editor JPROC call often follows immediately after one of the language translation JPROC calls. Each of the language translators also uses scratch work files (the SCR1 parameter; some also use SCR2 and SCR3). The SCR1 parameter coded for the linkage editor must agree L”ith the SCR1 parameter for the language translator; you can’t contradict this assignment without getting errors. So, if you specified SCR1tDSPO28 in the language translator JPROC call, you must do the same in the linkage editor JPROC call. You’ve already seen that the symbol field provides a name for the generated LOADM linkage editor control statement, and the input-module-name parameters provide the names for the generated INCLUDE linkage editor control statements. However, there are times when you want to physically place these linkage editor control statements in the control stream as data; you don’t want the JPROC call to generate them. You indicate this by using the STD parameter. For instance, you may want to include only certain parts of an object module to form a load module. Since there’s no provision for doing this with the JPROC, you have no choice but to physically place the linkage editor control statements you need in the control stream. But, you have to use the STD parameter to tell the linkage editor JPROC that you’re going to do this, or else it automatically looks at the inp ut-modulename parameters, and then the symbol field, for the name of an object module to include. Since you didn’t specify the linkage editor control statements through the JPROC call (they’re physically in the control stream), these fields would be blank. Another case: you may want to use additional linkage editor control statements as well. (OVERLAY, for example, there’s no parameter for this.) Whenever you place any linkage editor control statement physically in the control stream, all the needed linkage editor control statements must be physically placed in the control stream. The STD parameter looks like this: STD= iYE 1NO Indicating NO means you’re goingto physically place the linkage editor control statements in the control steam. The default value, YES, means you want them generated automatically. STD=NO tells the JPROC to ignore any specifications in the JPROC call for automatically generating INCLUDE and LOADM linkage editor control statements. 70044623-000 5-29 Doing It the Easy Way with Procedure Calls - Next, let’s look at the parameter telling the JPROC where to find the linkage editor: ALTLOD= (voL-ser-no,Labet) CRES, (abet) (RIJN,( abet (*, (abet) Normally, the linkage editor resides in $Y$LOD. However, you may want to use a copy of the linkage editor that is not in $Y$LOD. The ALTLOD parameter allows you to identify the file that contains the linkage editor you want to use. You may specify a volume serial number, RES, RUN, or an asterisk (*)• RES means the file is on SYSRES; RUN means the file is on the volume containing the job’s $Y$RUN file; and the asterisk means the volume is identified in the file catalog. In all cases, the label provides the file identifier. If the ALTLOD parameter is omitted, the normal procedure of searching $Y$LOD and the $Y$RUN is performed. The next parameter we discuss is one making available certain linkage editor options. The parameter looks like this: OPTION=’options’ The options that may be specified here are all the keywords appearing in the linkage editor /IPARAM and LINKOP control statements that do not need to be equated to subparameters as, for example, SHARE, NOSHARE, AUTO, and NOAUTO. Refer to the linkage editor section of the System Service Programs (SSP) Operating Guide (UP-8841) for all the options. The GLIB parameter looks like this: CLIB= (vot-ser-no,labe(,mothame) (RES, (abet ,modne) (RUN, I abet ,mocfriame) (*, (abet ,modname) You use this parameter to specify where the linkage editor control statements reside that are to be processed for this link-edit job. As the parameter indicates, you must supply the name of the source module and the file in which it resides. You must also specify the disk volume on which the file resides. The CMT parameter inserts a character string in the comment field of each phase header record produced for the generated load module. Its format is: CMT=’ comment’ The character string you choose may run up to a maximum of 30 characters and must be enclosed in apostrophes. It may contain blanks, commas, and other special symbols, excluding apostrophes. C 5-30 7004 4623-000 Doing It the Easy Way with Procedure Calls - The ENTER parameter specifies the transfer address. The ENTER parameter looks like this: ENTER=expression The expression is a decimal number from one to eight digits, a hexadecimal number from one to six digits in the form X’nnnnnn’, a previously defined symbol, or a previously defined symbol plus or minus a decimal or hexadecimal number, in the form we’ve just discussed. Now, let’s do some coding. Cott.xm 72 1. 2. II JOB LNKJPROC //BELLPR LINK PAYROLL,IN=(DISKØ1,PRAREA), OUT=(DISKØ1,BELLHRLPR) I/i I& 3. X II FIN 1. This is the JOB control statement telling the operating system that the name of the job is LNKJPROC. 2. This is the JPROC call. (We’re only link editing, not automatically executing, also. Thus, the operation is LINK, not LINKG. Besides, the OUT parameter is used. When an output file is specified, the LINKG operation can’t be used.) As you can see, we used the IN and OUT parameters. The source deck was already compiled (let’s say yesterday), and the IN parameter indicates it’s stored in the file identified by PRAREA, on disk volume DISKO1. The OUT parameter indicates we also want the load module to be stored on disk volume DI3KO1. This payroll is for the l3eil Historical Library, so we chose a file identifier that closely represents the name: BELLHRLPR. (Assume this file has already been allocated; otherwise, we’d need a device assignment set to allocate the file.) When the object module was created (compiled or assembled), it was given the name PAYROLL. So, this is the name of the object module we want to obtain from the file identified as PRAREA. This provides us with the inputmodule-name parameter, which generates an INCLUDE linkage editor control statement for this module. We’re providing a name for the load module by using the symbol field. We also want to make this name readily identifiable with the company name. Since the symbol field is limited to six characters maximum, we can’t use BELLHRLPR, as we did for the output file identifier. (Also, two identical names in the same JPROC call could cause confusion.) We’ll shorten it to BELLPR. This is what will appear on the generated LOADM linkage editor control statement. When you want to execute this load module, this is the program-name you’d use on the EXEC job control statement. 70044623.000 5-31 Doing It the Easy Way with Procedure Calls - This ends the job and terminates the card reader operations. 3. Now here’s what the JPROC call generated: f I 2. II II /1 II II Is 3. 4. 5. I/JOB II DVC /1 DVC If LBL if DVC II LBL INKJPROC 20 II LFD PRNTR 50 II VOL DISK01 PRAREA II LFD IN 50 II VOL DISK01 BELLHRLPR II LFD OUT DVC RES EXT ST,C,1BLK,(256,10) LBL $SCR 1/ LFD $SCR1 EXEC LNKEDT PARAN OUT=O(JT LOADM BELLPR INCLUDE PAYROLL,IN f 1* I& II FIN 1. This is generated by the IN parameter. The linkage editor uses the DVCVOL JPROC (which we’re showing in its generated form: DVC and VOL). DISKO1 is the first volume requested in the job, so it receives the first logical unit number: 50. The IN parameter always generates a file name of IN for the LFD job control statement. 2. This is generated by the OUT parameter. Again, DISKO1 was requested in the JPROC call, and since it was already assigned to logical unit number 50, this number is assigned to this volume every time it’s encountered in the job. The OUT parameter always generates a file name of OUT for the LFD job control statement. 3. This is the device assignment set for the scratch work area, which was generated by default in this case. 4. This is the PARAM job control statement generated by the OUT parameter. 5. This is the object module name (PAYROLL) and the load module name (BELLPR). These linkage editor control statements are generated by the input-module-name parameter and the symbol field. The IN shown on the INCLUDE linkage editor control statement is generated because both subparameters on the IN keyword parameter are used. We’ve now covered all the parameters of the linkage editor JPROC call and provided examples of their use. You should now be able to use this JPROC call correctly. 5-32 7004 4623-000 Doing It the Easy Way with Procedure Calls - Personalizing Your Print Output Unisys provides the WRTBIG and WRTSML JPROCS to produce block characters on your printed output. Any type of information can be printed by WRTBIG and WRTSML your name or a message, for example. - WRTBIG and WRTSML function in the same way; the only difference between the two is the size of the block characters produced. Those created by WRTSML are smaller than those created by WRTBIG. WRTBIG and WRTSML produce block characters formed by the characters themselves, arranged in the pattern of the characters being printed. You can print the letters A through Z and the numbers 0 through 9. In addition, you can use WRTBIG and WRTSML to print these special characters: Left parenthesis I Left bracket Right parenthesis I Right bracket + Plus & Ampersand ‘ Apostrophe * Asterisk @ At Hyphen > Greater than / Slash < Less than ? Question mark I Vertical line Colon ! Exclamation Point # Number ; Semicolon = Equal - $ Double quote — Underscore Period , Comma Dollar % Percent Embedded blank Note: Some printers cannot print all of these characters check with your system administrator. - Up to eight blocks, or lines, of print can be generated by WRTBIG and WRTSML. 7004 4623.000 5-33 Doing It the Easy Way with Procedure Calls - Each line produced by WRTBIG can contain up to 12 characters. A maximum of four lines can be printed on each page. WRTBIG produces characters 10 characters high and 8 characters wide. The letter P, for example, prints like this: pppppp ppppppp pp pp pp pp ppppppp pppppp pp pp pp pp WRTSML produces characters seven characters high and five characters wide. Up to 20 characters can be printed on each line, and up to 6 lines can be printed on each page. The number 7 produced by WRTSML looks like this: 77777 7 7 7 7 7 7 Note that the character produced by WRTSML is 7 characters high and the one produced by WRTBIG is 10 characters high. The format for WRTBIG and WRTSML is: //[symboL) fWRTBIG lTsMIf ‘b[ock-1’[,’bLock-2’,...,’btock-8’] f,IN= I I I L [LUN L 5-34 (vot-ser-no,tabet) (RES,Labe[) (RUN,Labet) (*LaI() (RE C nnn {2a } , tfe {PRNTR } [,dest]) 7004 4623-000 Doing It the Easy Way -with Procedure Calls The ‘block’ parameter is where you code the actual information you want printed on a line. Notice there are eight ‘block’ parameters one for each line of print. Each parameter is enclosed by apostrophes. You can use blanks anywhere in the field to position the characters on the page. - For instance, if you coded this: II WRTSML ‘ RETURN’,’ TO’,’ JOHN DOE’ you get: RRRR EEEEE R RE R RE RRRR EEE RR E RR E R R EEEEE TTTTT T T T T T T U U U U U U Ii RRRR N N UR RNNN UR RNNN U RRRR N NN URR N N URR N N UUUU R R N N TTTTT T T T T T T JJJ 00000 H H N N J 0 OH HNNN J 0 OH HNNN J 0 0 HHHHH N NN JO OH HN N JJ 0 OH HN N JJ 00000 H H N N 00000 00 00 00 00 00 00000 DDDD 00000 EEEEE D DO OE D DO OE D D 0 0 EEE D DO OE DO D OE DDDD 00000 EEEEE Notice that even though the field can be 12 characters, it does not have to be. You can put the end apostrophe after the last character for the line. Also, note that if there are over 12 characters for WRTBIG or over 20 characters for WRTSML the field is truncated. You can also use WRTBIG and WRTSML to print the date, the time the job started, the system version number, and the job name from the JOB control statement. This is done by coding the following as the first four characters in any ‘block’ parameter (nothing else can appear in the parameter; the last eight positions must not be used): o TIM$ This prints the time of day in the form of hh:mm:ss (hours, minutes, seconds). • DAT$ This returns the date, in the form of yy/mm/dd (year, month, dày). 7004 4623-000 5.35 Doing It the Easy Way with Procedure Calls - •VER$ This gives you the version number of the operating system in use. • JOB$ This prints the job name from the JOB control statement. Each option can be used alone, or combined with other options or information. Look at this example: Coti.ITrl 72 // JOB POCO ii WRTBIG ************I, ‘JOBS’, Ill .‘DATS’, //2 X X X 1/3 (Remainder of your controL stream) Note the use of statement continuation. The printout would look like this: PPPPPP PPPPPPP pp pp pp pp PPPPPPP PPPPPP PP PP PP PP 999 99999 99 99 99 99 99 999 99999 99 99 99 99999 999 5-36 000000 00000000 oo 00 oo 00 00 00 00 DC) 00 00 00 00 00000000 000000 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 CCCCCC CCCCCCCC CC CC cc CC CC CC CC CC CCCCCCCC CCCCCC / II III II! /1/ III III /1/ II 1 000000 00000000 00 00 oo oo 00 00 00 00 00 00 00 00 00000000 000000 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 8888 888888 88 88 88 88 8888 888888 88 88 88 88 888888 8888 I /1 /// III /1/ III III /1/ // / 0000 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 0000 8888 888888 88 88 88 88 8888 888888 88 88 88 88 888888 8888 70044623-000 Doing It the Easy Way with Procedure Calls - The IN parameter identifies the file containing either the load module WRTBIG or the load module WRTSML. If you don’t specify this parameter, it is assumed that the module you want is on SYSRES in the file $Y$LOD. If the load module is on SYSR.ES, but in a file other than $Y$LOD, specify (RUN,label), where label is the file identifier. To indicate that the load module is on the volume containing the job’s $Y$RUN file, use (RUN,label). If the file containing the load module is identified in the file catalog, use (*,label). The LUN parameter provides the logical unit number of the printer to be used. By default, 20 is used. But, if you want a specific printer, use the appropriate logical unit number. (Make sure the rest of your print output goes to this printer.) If the file name in the job is not PRNTR (which the programs supplied by Unisys use), you indicate this through the lfdname of the LUN parameter (this is similar to the LFD job control statement). The dest subparameter indicates the remote destination identifier (one to six alphanumeric characters) for the print output file when dealing with remote batch processing, which requires that every unit record device must have a destination. You can change the standard load code or vertical format buffer used for the job by coding N as the value of the LUN parameter. This indicates that the JPROC is not to generate a device assignment set for the printer; you must physically place the device assignment set for the printer in the control stream before the JPROC call. Suppose you wanted to use WRTSML to print the date at the beginning of the printout, and the file name for the printer in the program is LISTER. You would code it as: /1 WRTSML ‘DAT$’,LUN=(,LISTER) 7004 4623-000 5-37 Doing It the Easy Way with Procedure Calls - Controlling Spooled Output with a JPROC Call The maimer in which spooled output files (print, punch, or data-set-label diskette) are handled is set at SYSGEN time, but you can alter the standard operation of individual files with the SPOOL JPROC. To fully understand the function of this JPROC, you should be familiar with spooling, which is discussed in the Spooling and Job Accounting Operating Guide, 7004 4581. When used, the SPOOL JPROC must be included in the device assignment set for the spooled output file. The format of the JPROC is: //[symbot] SPOOL, [EDIRECT= [DISK 11[,BUF=nXIn]LCOPIES L ITAPE H DISKETTEJJ I L LSKIPCODE L LHDR= [NO L In11LREc0RDS= [n lfJ[ [HOLD= L Note: 1[,FORMNAME=forms] lø j 11IJTESTPAGE= INO 1iE,PAGEBRKn] IYESIJ 1YESI] LIJPDATE= [No L I L ii IJCOMPRESS= 1YESI] fNP 1YESIJ L JSECURE [NO rio ii [RETAIN= jYES lsfJ L INO L When using the SPOOL JPROC for a spooled data-set-label diskette output file, only BUF, RETAIN, UPDATE, COMPRESS, and HOLD keyword parameters are meaningful. The REDIRECT keyword parameter redirects spooled output (output that’s already in the spool file volume) to a disk, tape, or format-label diskette for temporary storage - the output is printed or punched later. A spooling component known as the output writer assigns the tape, disk, or format-label diskette volumes to be used for the redirected output so you don’t have to include a special device assignment set in your job control stream for these volumes. Notes: 1. When you specify REDIRECT=TAPE, make sure that a DEV operator command, directing all spooled output to a tape volume, is not in effect for this copy of the output writer. A note to the operator should suffice. 2. REDIRECT=DISKETTE means redirect the spooled output to a System 80 formatlabel diskette only. CI 5-38 70044623-000 Doing It the Easy Way with Procedure Calls - The COPIES keyword parameter allows you to specify the number of times (up to 255) you want a spooled file printed or punched (output). If you don’t specify this keyword, the file is output only once and then deleted from the spooi file. If you specify 0, the output is written to the spool file but is immediately deleted instead of being printed or punched. The BUF keyword parameter sets up buffers to be used by the spool subfile being created. The n specifies the number of buffers, Xis a constant, and m specifies the size of each buffer (in 256-byte increments). If you omit this parameter, the spooled file shares the job log buffers along with other spooled files not having reserved buffers. You must specify SKIPCODE if you’re requesting a filed vertical format buffer (via the II VFB statement) that has more than seven skip codes or if the system default vertical format buffer has more than seven skip codes. Three skip codes are always included in this count: home position for current page, overflow for next page, and home position for next page. The four remaining are for user-specified skip codes. This parameter, therefore, specifies the total count of lines on a form where a skip code is allowed, plus three. Zero indicates no skip codes. The RECORDS keyword specifies the number of records (lines, including spaces and skipped lines for print files, cards for punch files) the spool file can contain before a message asking if the job should be continued, breakpointed, or cancelled is sent to th operator. The operator receives this message only when the specified number is reached, and job processing stops until the operator replies. The specified number is rounded to the next higher multiple of 1024. For example, if you specify 7000, it’s rounded to 7168. The highest number you can specify is 262,144. Value 0 specifies no limit is put on the number of records that can be entered into the spool file. Note: Ifyou’re executing a COBOL program that uses the WRITE verb with the AFTER clause, the number you specify for RECORDS should be double that of the actual number of records. If your spooled file is to be output on a special printer form or on special cards, you must identify the special form or card type in the FORMNAME parameter. The form name you specify is a 1- to 8-alphanumeric-character name assigned by your installation to each form. A message identifying the form or card type to be used is issued to the operator. Remember, a form name specified in a VFB statement overrides a form name specified in the SPOOL JPROC (see “Using Forms Control” in Section 6). The HDR parameter (HDR=NO) suppresses the printing of a page header in burst mode at the beginning of the spooled file when it’s output. If omitted, a page header is automatically printed. If you specify the FORMNAME parameter, a query is directed to the operator asking if a sample test pattern page should be printed. Specifying TESTPAGE=NO suppresses this query. If the TESTPAGE parameter is omitted, the system default (YES) is used. This query does not occur for STAND1 forms. 70044623-000 5-39 Doing It the Easy Way with Procedure Calls - You use the PAGEBRK parameter to specify the number of pages or cards to be spooled out before the file is breakpointed and printed or punched. The highest value you can enter is 32,000. When you omit this parameter, the file is printed or punched according to the burst or nonburst operating mode in effect. The UPDATE parameter (UPDATE=NO) specifies that the spool file subdirectory entry is to be updated only when a file is closed. (In this case, if the system halts, you lose any output the program generated prior to restarting the IPL with spool file recovery.) If you omit this parameter, the spooler updates the subdirectory each time it crosses a logical track in the program file. (In this case, if the system halts, you can still print any output the program created prior to starting the IPL again.) Using the COMPRESS keyword parameter (COMPRESS=N0) you can prevent the system from attempting to compress data that’s directed to the output spool file. Normally, you should not specify COMPRESS=NO if the data contains a large number of embedded blanks or if the file has a block size larger than 120. Specifying this parameter when the block size is 121 or greater results in an output spool file containing only one line per sector and requires that n x m be at least 2 x 4. , If you specify RETAIN—_YES, the spooled output file is printed, punched, or placed on data-set-label diskette, but it is also retained in the spool file to be printed, punched, or output to data-set-label diskette again at a later time. If RETAIN is specified with REDIRECT (the first keyword parameter), the output file is redirected to a tape, disk, or format-label diskette and it is also retained in the spool file for printing, punching, or outputting to data-set-label diskette at a later time. The HOLD keyword parameter (HOLD=YES) simply holds the spooled print, punch, or data-set-label diskette output file for later processing. (Files on hold are released when the BEGIN SPL command is issued or when a CC job control statement specifying the BEGIN SPL command is encountered in ajob stream.) This parameter is useful if you have a large spooled file that will take a long time to output and you don’t want to tie up the output device during peak processing time. Remember though, since the file being held remains in the spool file, there is a possibility that the spool file’s available disk space may be exhausted. Also, if you specify HOLD=YES in conjunction with RETAIN, REDIRECT, or both, the or’tput file is put on hold and the RETAIN or REDIRECT parameters are not acted upon until the file is released. 5-40 7004 4623-000 Doing It the Easy Way with Procedure Calls - The last keyword parameter (SECURE) determines whether print output that’s destined for an auxiliary workstation printer is secured or not secured. (Spooled output is directed to an auxiliary workstation printer via II ROUTE or II OPTION OUT.) We say the print file is secured if the workstation to which the auxiliary printer is physically connected must be logged on before the output file can be printed. If the workstation isn’t logged on, the file will not be printed. If the file is not secure (this is the default), the file will be printed at the specified auxiliary workstation printer whether or not the workstation is logged on. Here is an example of a job using the SPOOL JPROC to control output spooling. /1 II /1 II II ii II II II II II I& If JOB PAYROLL DVCVOL DSPO28 LBL JONESPAYROLL LFD JONESPAY DVC 130 SPOOL BUF=4X32 LFD JONESYTD DVC 20 SPOOL HOLD=YES LFD JONESCHK EXEC JONCKS 1 Device assignment set for the input file on disk. j 1 j 1 Device assignent set for a spooled printer output file. Device assignment set for a spooled data-set- label diskette output file. (See “Spooling Input Card Data” in Section 6 for information about the DVC statement for spooled data-set-label diskette files.) FIN We have now finished our discussion of what is known as basic job control. From this point on, we enter the area of advanced job control programming. You’ll learn how to use the advanced job control statements to perform functions that cannot be done with the basic set. You’ll also learn how to write your own job control procedure definitions, which you can store and call when needed. By now, your grasp ofjob control should be such that you could construct control streams for the majority ofjobs in your installation. When you finish Sections 6 through 9, you should be able to construct control streams for any job. 70044623.000 5-41 0 0 0 Section 6 Making Job Control Work for You Advantages of Using Advanced Job Control Statements As you have just seen, quite a lot can be done by using the job control procedure calls (JPROCS) and the basic job control statements supplied by Unisys. Now we’ll see how to increase performance by using the advanced job control statements and JPROCS that you write yourself. Your basic objective is to run jobs in the most efficient, most economical, and quickest way possible. This objective is achieved not only by how you write a program, but also in the way you use job control. Controlling Spooled Output with a Job Control Statement In Section 5, we discussed how you can alter the standard operation (established at SYSGEN time) of spooled output files with the SPOOL JPROC. The SPL job control statement provides the same facilities and parameters as the SPOOL JPROC, so the following brief description of the SPL job control statement is essentially a review of “Controlling Spooled Output with a JPROC Call” in Section 5. When deciding whether to use the SPLjob control statement instead of the SPOOL JPROC, keep the following in mind: although the SPOOL JPROC is easier to code because of its keyword (rather than positional) parameters, it takes more time for the run processor to process the SPOOL JPROC. The format of the SPL job control statement is: //[syrnbol] SPL HOLD RETAIN TAPE DISK DISKETTE FI L [,nXm) 0 , no-cop J 1iiD1 E,NOCMP)E,RETAIN][,HOLD]E,SECURE) 1UPD 70044623-000 , Ino-skpcodellE max-rec 7E,forms)j INOHDR11[ fNOTSTL 5120 I I 1HDR ff1 1STL f L E,brk-pge] Note: [{ } f When using the SPL statement for a spooled data-set-label diskette output file, only the nXm, NOUPD, NOCMP, RETAIN, and HOLD parameters are meaningful. The remaining parameters are ignored. 6-1 Making Job Control Work for You The HOLD parameter holds the spooled output file (print, punch, or data-set-label diskette) for later processing. Files on hold are released by a BEGIN SPL command or by a CC job control statement specifying a BEGIN SPL command. You’ll notice that HOLD is also the last parameter of the SPL statement. This is so you can specify HOLD (as the first parameter) or choose one of the other options for the first parameter and still specify HOLD (last). With the RETAIN parameter, the spooled output file is processed (printed, punched, or placed on data-set-label diskette), but it is also retained in the spool file for processing at a later time. For the same reasons mentioned for HOLD, you can specify RETAIN as the first or the twelfth parameter. You use the TAPE, DISK, and DISKETTE parameters to redirect spooled output to tape, disk, or format-label diskette for temporary storage. The output can be processed (printed, punched, or placed on data-set-label diskette) at a later time. The remaining parameters can be summarized as follows: 6-2 • The nXm parameter establishes buffers for use only by the spool subfile being created. • The no-cop parameter allows you to specify the number of times (from 0 to 255) you want a spool file processed (printed or punched). Zero indicates no output. • The no-skpcode parameter must be specified if a filed vertical format buffer (requested via II VFB) or the system default vertical format buffer has more than seven skip codes. One skip code for forms overflow and two for home paper position are always included in this count. • The max-rec parameter specifies the number of records the output file can contain before a message is sent to the operator asking if the job should be continued, breakpointed, or cancelled. Value 0 specifies that no limit is put on the number of records that can be entered into the spool file. • The forms parameter identifies any special form or card type (other than the standard paper or cards) needed when the spool file is output. • The NOHDR parameter suppresses the printing of a page header at the beginning of a print file; the HDR parameter prints it. • The NOTSTL parameter suppresses the test line request message to the operator when a forms change is required. This request message does not occur for STAND1 forms. The STL parameter sends a test lines message to the operator when a forms change is required. If both parameters are omitted, the system default is used. 70044623-000 Making Job Control Work for You • The brk-pge parameter indicates a specific number of pages or cards to be spooled out before the file is breakpointed and printed or punched. • The NOUPD parameter indicates that the spool file subdirectory entry be updated only when a file is closed. Value UPD enables recovery of spooled data in the event of a system crash. • The NOCMP parameter indicates the system should not attempt to compress data that’s directed to the output spool file. • The RETAIN and HOLD parameters perform the same function they do when specified as the first parameter. Remember, though, if you specify HOLD (as the last parameter) with RETAIN; TAPE, DISK, or DISKETTE; or with RETAIN and TAPE, DISK, or DISKETTE, the output file is first put on hold. The other parameters are acted upon accordingly when the file is released. If you specify RETAIN (the twelfth parameter) with TAPE, DISK, or DISKETTE, the output is redirected to the appropriate device and a copy of the file is also retained (in the spool file) for later use. • If specified, the SECURE keyword parameter indicates that the workstation to which the auxiliary workstation printer is connected must be logged on before the output file can be printed. If the workstation is not logged on and this keyword parameter is specified, the file will not be printed. Just as described in “Controlling Spooled Output with a JPROC Call” in Section 5 for the SPOOL JPROC, the SPL job control statement must be placed in the device assignment set for the spooled file. Sending Spooled Output to Remote Batch Processing Terminals The DSTjob control statement is used to send spooled output (print or punch) to RBP (remote batch processing) terminals in your ICAM network. The format of the DST statement is: //Esymbot] DST dest-1[,dest-2,...,dest-16) The dest parameter is one to six alphanumeric characters and defined by RBP. The keywords OS3CTR or CENTRAL can be used to specify the local site’s printer. •7004 4623-000 6-3 Making Job Control Work for You The DST statement must appear within the device assignment set for the print or punch file. When specif’ing multiple destinations, you can list several destinations in one II DST statement or use several II DST statements each listing one or more destinations. For example: II JOB REMOTE 1/ DVC2B 1/ DST A,OS3CTR,c,D If LFD PRINT CN /1 JOB REMOTE or 1/ DVC2Ø 1/ DST A 1/ DST OS3CTR II DST C,D II EXEC PROG1 1/ EXEC PROG1 For more information on remote batch processing, see the Integrated Communications Access Method (ICAM) Utilities Programming Guide, 7004 4565. Note: RBP output (specified by / / DST) and DDP and auxiliary printer output (specified by I / ROUTE) cannot be mixed for any one job. For any job, all output must be of one type or the other. Sending Spooled Output to DDP Sites and Auxiliary Workstation Printers C The ROUTE job control statement routes print or punch output to printers and punches at DDP sites and to auxiliary printers connected to a load or remote workstation or terminal. You place the ROUTE statement in the device assignment set for the file to be routed. Notes: 1. Output can be routed to the site central printer and up to seven auxiliary printers. 2. The/I ROUTE and II DST statements cannot be mixed in the same job. The ROUTE statement format is: /ftsymbot)ROUTE destination-i,.. .,destination-8 You can specify up to eight destinations for non-DDP destinations, or one DDP site destination. These destinations are the central printer or punch at a local or DDP site, a workstation auxiliary printer at a DDP site, or an auxiliary printer that is locally or remotely connected to your system. You specifr the destination as follows: [host-id: luser- Id-i,... ,user- id-8 C 6-4 70044623-000 Making Job Control Work for You The host-id identifies a particular host in a DDP network. It is one to four alphanumeric characters long and identical to the label-id of the LOCAP macroinstruction in an ICAM network. You can also use $HOST to indicate the host that initiated the job (the originator/master). The host in this case may be remote or local. A host-id is optional but must be followed by a user-id if specified. Whenever you omit a host-id, the local host (the processor on which the job is executing) is assumed. To identify an auxiliary workstation printer, specify a 1- to 6-alphanumeric character workstation user-id. You can also use $Y$MAS to indicate an auxiliary printer at the master workstation. The keyword CENTRAL in place of a user-id indicates a central printer or punch. Any destinations that specify a user-id (other than CENTRAL) or $Y$MAS denote auxiliary workstation printers and are valid only for print files. Consider the following destinations: • CENTRAL or OS3CTR The output goes to the central printer or punch at the local site. • host-id:CENTRAL The output goes to the central printer or punch at a DDP site (identified by host-id). • host-id:user-id The output goes to an auxiliary workstation printer (identified by a user-id) at a remote host (identified by a host-id) at a DDP site.. This destination is valid only for print files. • user-id The output goes to an auxiliary workstation printer (identified by a user-id) that is locally or remotely connected to your system. This destination is valid only for print files. • $Y$MAS The output goes to the auxiliary printer if the master (the terminal or workstation that has control of the job when the job is executed) at the local site is a workstation. Otherwise, the destination is the central printer at the local site. The $Y$MAS destination is valid only for print files. 70044623.000 6-5 Making Job Control Work for You The following statements route output to the central printer: /1 ROUTE OS3CTR and II ROUTE CENTRAL The following statement routes output to up to eight auxiliary printers: If ROUTE USERID1,....,USERID8 The following statement routes output to the central printer and up to seven auxiliary printers: 1/ ROUTE OS3CTR,USERIO1,...,USERIDT The following control stream contains a device assignment set for a print file which includes the II ROUTE statement. II JOB OUTPUT II DVC 20 II ROUTE A123:CENTRAL 1/ LFD PRTFIL 1 J Print file device assignment set C. /1 EXEC PROG1 The ROUTE statement in the preceding device assignment set routes the print output to the central printer at a remote host whose host-id is A123. C 6-6 70044623-000 Making Job Control Work for You Notes: 1. RBP output (specified by / / DST) and DDP or auxiliary printer output (specified by / / ROUTE) cannot be mixed for any one job. For any job, all output must be of one type or the other. Also, DDP destinations and local auxiliary printer destinations cannot be used for the same print file. 2. When a workstation or terminal starts ajob that directs printed output to an auxiliary printer connected to a local or remote workstation or terminal (one that is not the originator), the user at the other workstation or terminal must be logged on with the same user-id as specified in the / I ROUTE job control statement and must issue an RP command to starts printing. See the Interactive Services Operating Guide, UP-9972, for more information on the RP command. Spooling Input Card Data Ajob that reads a large volume of data through the card reader ties up the operating system by using a slow-speed device (card reader) as the means of supplying input to a high-speed processor. You can avoid this by loading the card data into a spooi file (high-speed disk device) for later retrieval. In this way, the card reader can be used to transfer data to the spooi file while other jobs are being executed in the high-speed processor. High-speed processing, therefore, goes on without interruption from a slowspeed card reader. The system operator uses the IN command to initiate spooling. You must identify the card file to be spooled to the system operator, precede these cards with a DATA statement, and follow them with a FIN job control statement or another DATA statement. DATA is a control statement that identifies (to the input reader) the card data you want spooled. Its format is: II DATA FILEID=fiLe-identifier[,RETAIN][,IGNORE] When the operator places your cards in the card reader and issues the IN command at the console, the card file is placed in the spool file along with the file-identifier from the DATA statement. The FIN or the final DATA card terminates the card reader. The spooled card file becomes a subfile. Later, when your job stream is run, the subfile is read in (just as the cards are read in at the card reader, only much faster). Spooled data cards may be read by ajob that’s entered at a card reader or by a stored job control stream. Note: Input data doesn’t have to be spooled before yourjob’s processing begins, but it must be spooled by the time your program attempts to open its files. The job control stream must contain a device assignment set for a card file. If you’ve included an LBL job control statement in the device assignment set, the file identifier specified on the DATA card must match the LBL statement’s file identifier. If there isn’t an LBL statement, the file identifier on the DATA card must be a concatenation of the job’s name and the file name from the LFD job control statement. Either way, an association is made between the file you defined in your job control stream and the subfile. 7004 4623-000 6-7 Making Job Control Work for You If this is the control stream, II 1/ II II I& /1 JOB DVC LBL LFD BALANCE 30 SPOOL1 READ FIN you code this DATA statement: 1/ DATA FILEID=SPOOL1 If this is the control stream, 1/ JOB BALANCE If DVC 30 II LFD READ ‘a II FIN you code this DATA statement: II DATA FILEID=BALANCEREAD The RETAIN parameter is used to maintain the subfiie after it is processed. If you specify RETAIN, only the DE SPL,RDR console command can delete the subfIle. The following example shows the use of the RETAIN parameter: II DATA FILEID=BALANCEREAD,RETAIN data cards II FIN You can, if necessary, place all RUN/RV job control statement in the card deck. When the deck is spooled, the run processor calls the specified job stream. Only one RUN/RV statement may be placed within a DATA...DATA or DATA....FIN card sequence. if more than one RUN/RV statement is present, only the last statement is used. The IGNORE parameter is used to permit RUN job control statements to be spooled as data. It can be used, for example, for conversion jobs. Suppose you have a card deck of control streams to be converted from another operating system to 05/3 and you have several RUN statements in the deck. When you spool the card deck, you don’t want the RUN statements to call stored control streams; you want them converted to 0S13 RUN job control statements. Let’s assume we are running a conversion job named CNVT with an input card deck to be spooled named CARDIN. The DATA FILEID job control statement is coded like this: II DATA FILEID=CNVTCARDIN,,IGNORE 7004 4623-000 Making Job Control Work for You Because we specified IGNORE in this example, RUN statements in the card deck are spooled as data cards. Spooling Diskette Files Just as card input can be spooled, so can input from data-set-label diskette. The operator uses the IN command to initiate the spooling and the data is placed in the spool file. It remains there as a subifie and is retrieved by either a control stream entered at a card reader, or by a prefiled job control stream. The data set label from the diskette provides the label for your spool file, while the /* statement indicates the end of the data file. Whenever you’re using input that’s spooled from data-set-label diskette, specify the I parameter of the DVC statement for the diskette. Remember, the format of the DVC statement is: //[symbo[] DVC nnn[(n)] RES RUN , addr OPT IGNORE ALT 0 REQ[(n)) REAL The I parameter tells job control that your data is in the spool file. The data cannot be retrieved from this file unless the I parameter is specified as follows: II DVC 132,1 The 0 parameter is used when you want the spooled output to go to data-set-label diskette. 70044623-000 6-9 Making Job Control Work for You Equating Logical Unit Numbers to Device Type Codes Since logical unit numbers can be changed at SYSGEN time, the possibility exists that, when running your control stream on a system other than the one it was designed for, one of your logical unit numbers may indicate a different device on the other system. For example, the system your control stream was designed for might have logical unit number 64 associated with an 8416 disk subsystem. But on the system you are running under, logical unit number 64 may be an 8419 disk subsystem wrong device. A way to get around this is to use the EQU job control statement, which equates logical unit numbers to specific device type codes. (This device type code is always associated with this device.) - The format of the EQU job control statement is: //Esymbot) EQU Lun-1,type-i[,lun-2,type-2,...,Lun-n,type-n) The lun parameter indicates the logical unit number you have on the DVC job control statement in the control stream. The type parameter is the 4- to 8-hexadecimalcharacter device type code for the device you are using. See Table A-i of the Job Control Programming Reference Manual, UP-9984, for the codes. The EQU job control statement, which you must place before the device assignment sets in the control stream, is effective for the entire job. Let’s assume that a job is being run on a system other than the one it was written for and that there’s a possibility the logical unit numbers in the second system were changed at SYSGEN time. On your system, logical number 64 is the 8416 disk subsystem. To ensure that we get an 8416 on the other system, we insert an EQU job control statement coded as follows (the device type code 2002 was obtained from Table A-i of the Job Control Programming Reference Manual, UP-9984). - Ii /1 II II 1/ EQU DVC VOL LBL LFD - 64,2002 64 DISKO1 XYZ TEST You can also use the EQU statement to specify additional logical unit numbers for virtual readers, printers, or punches. See “Using Multiple Devices, SYSRES, or the Job’s $Y$RUN File” in Section 4. C 6-10 70044623-000 Making Job Control Work for You Specifying Unique Load Codes A load code buffer controls what characters are printed by your printer. Codes corresponding to the characters on your print band or cartridge are placed in the buffer and whenever a particular code is encountered, the character equated (via the load code buffer) with that code is printed. (To simplify this discussion, we’ll use the term print cartridge from here on to mean print band or cartridge.) For non-SDMA printers (0770 and 0776), the default contents of the load code buffer are set at SYSGEN time; there is a unique buffer for each printer type. One of the uses of the LCB job control statement is to override these specifications to equate different codes with different characters so that you can change print cartridges. You define a load code buffer by specifying an 8-bit code for each character on the cartridge. Whenever that code is encountered, the corresponding character is printed. - For SDMA printers (class I, II, III), each print cartridge contains its own corresponding load code buffer. Therefore, you don’t need to define a unique buffer in an LCB statement when you change cartridges. if you do, it is ignored. As you’ll see, though, the// LCB statement has other uses. There are two formats for the LCB statement, one for non-SDMA printers and the other for SDMA and AP9215-1 printers. The format for non-SDMA printers is: //[symbot] LCB 1 fX’hex-strng-1’ rrx’hex-string.2’ 1 c’char-string-1’ Lld1tn9.2hi i..., fX’hex-stririg-n’ lC’char-string-n’ [,CARTNAME=symbot] LNAME= I I I 48-BUS 48-Sd 63-STD OWNLC1 L [JCARTID= IX’aa’ 1C’c’ L [,NUMBCHAR=n] LTYPE= [0770 L j0776 [JSPACE=[X! aa’ L I.X’40’ continued 70044623-000 6-il Making Job Control Work for You JJMISM= ir.NQRE 1REPORT L [DUAL= X’ xxyyxxyyxxyyxxyy’ I C’abababab’ C’bbbb’ I L LMISMCHAR= fx’aa’ L.x The only parameters that have practical use for SDMA printers are symbol, CARTNAME, NAME, TYPE, and MISM. The format of the LCB job control statement for SDMA and AP9215 printers is: 1/ [symbol] LCB Efl.4AME=symbol] [JNAME= L 48-BUS 48-Sd 63-STD OWNLC1-OWNLC9 I J [,TYPE=SDMA] LMISM= L f IGNORE 1REPORT The symbol in the label field is a 1- to 8-alphanumeric character name and can have one of the following uses: • To specify a default cartridge name when you omit the CARTNAME parameter • To specify the name of a filed load code buffer that you’re changing via the job SG$PRB Use of symbol will become more clear after we discuss the CARTNAME and NAME parameters. For non-SDMA printers, you use the first parameter of the LCB statement to assign the codes for each graphic symbol on the print cartridge by specifying either the X’hex-string’ (hexadecimal) or C’char-string’. You need two hexadecimal characters or one EBCDIC character for every symbol. The position of each in the string of parameters must correspond to its position on the print cartridge. As many 6-12 70044623-000 Making Job Control Work for You parameters as you need to specify the entire print cartridge may be used; you may intermix the character and hexadecimal strings as required. Since the single quote (apostrophe) and ampersand (&) symbols have special meanings to job control, they must always be coded in hexadecimal. Statement continuation is only allowed between parameters; individual character strings can’t be coded on one job control statement and continued on another. When using hexadecimal character strings, the number of digits must be even. Note: The character strings for your printer are shown in the appropriate printer subsystem manual. The CARTNAME parameter specifies the name of the print cartridge to be used. Your installation is responsible for assigning a unique, 1- to 8-alphanumeric character name to each cartridge. SCIENCE, for example, could be used for a scientific character set. When you provide a cartridge name in the II LCB statement, the operator. is requested to mount the cartridge just before the file starts printing. The output is not printed until the operator mounts the cartridge and replies to the message. Remember, if you don’t specify a cartridge name, the cartridge that’s already on the printer is used. So, to ensure use of the proper cartridge and to avoid printing of the wrong characters, you should specify a cartridge name. You can use symbol in the label field of the LCB job control statement (instead of CARTNAME) to specify a cartridge name. If you use both symbol and CARTNAME to specify a cartridge name, the CARTNAME parameter takes precedence. You specify NAME when you want to use one of the filed load code buffers (48-BUS, 48-SCI, 63-STD, or OWNLCn) established at SYSGEN time or by use of the job SG$PRB. There is aunique 48-BUS, 48-SCI, 63-STD, and OWNLCn foreach printer type. (There is also a default load code buffer for each printer type when no II LCB statement is specified.) NAME indicates that you want a filed load code buffer; you’re not establishing your own. Therefore, CARTNAME, TYPE, and MISM are the only other parameters you can specify when you use NAME. The NMIIE parameter specifies the name of the filed load code buffer, which in turn specifies a cartridge name. So, when NA?VIE is specified, CARTNAME is unnecessary. As mentioned earlier, you can also use symbol for the name of a filed load code buffer. This is done only when you are executing the job SG$PRB to change a filed load code buffer (48-BUS, 48-SCI, 63-STD, or OWNLCn) via the job SG$PRB. If this is the case, you use symbol to specify the name of the buffer to be changed. This is the only time symbol indicates a load code buffer name. At all other times it indicates a default cartridge name if you omit the CAl? TNAME parameter. See the appropriate installation guide for more information about the job SG$PRB. 70044623-000 6-13 Making Job Control Work for You The CARTID parameter specifies a cartridge or band identifier. It may be either two hexadecimal digits (X’aa’) or one EBCDIC character (C’c’). This parameter is required for non-SDMA printers (0776 and 0770) and must agree with the number found physically on the cartridge. The NUMBCHAR parameter applies only to non-SDMA printers and specifies the total number of graphic symbols expected on the print cartridge. As a safety check to make sure you specified all characters, this number should coincide with the number of characters specified in the character strings. When you omit NUMBCHAR , the number of characters specified by the character strings is assumed to be correct. To identify the printer for which the LCB job control statement is constructed, you use the TYPE parameter. From this, we can see that an LCB job control statement coded for one type of printer cannot be used for another type. The 0770 and non-SDMA 0776 printers are available only on the models 8/1 0/1 5/20/50 systems. For all other non-SDMA printers, enter * for the TYPE parameter and use the logical unit number to specify the type of printer. Specify SDMA for the TYPE parameter if you are a model 7E user with an AP9215-1 printer. You specify the space, or nonprinting code, for non-SDMA printers through the SPACE parameter. This code is not included in either the X’hex-string’ or C’char-string’ parameters. It may be either two hexadecimal digits (X’aa’) or one EBCDIC character (C’c’). The default value is X’40’. A mismatch occurs when you try to print a character that is not in the load code buffer or has not been specified as a dualed character. You can use the MISM parameter to record character mismatch errors in the system error log by coding MISM=REPORT. The default, MISM=IGNORE, means that mismatches aren’t recorded. For the 0770 or 0776 printer, you have a choice as to the replacement symbol. If you specify in EBCDIC, you would use the DUAL—C’abababab’ parameter, with a being a character that is on the print cartridge and b being the character that a replaces. For example, assume that the print cartridge contains the asterisk symbol (*) but not the question mark symbol (?). You could substitute * for ? in the printout by specifying DUAL=C?’. Every time the program outputs the EBCDIC code for a question mark, an asterisk appears in the printed listing. If you specify in hexadecimal, you would use the DUAL=X’xxyyxxyyxxyyxxyy’ parameter, where xx is the code for the character printed and yy is the code of the character that xx replaces. We’ve already said that when a character mismatch occurs, you can use the MISM parameter to record it in the error log. For non-SDMA printers, you may also specify a character that’s to appear on the printed output in case of a character mismatch; otherwise, a blank will appear (the default value X’40’). This is done with the MISMCHAR parameter. You can specify any character you want, in either hexadecimal (X’aa’) or EBCDIC (C’c’), as long as the character also appears in either the X’hex-string’ or C’char-string’ parameter. C 6-14 70044623-000 Making Job Control Work for You Here is an example of how the LCB job control statement is used for a non-SDMA printer: Co(umn 72 1. 2. 3. 4. 5. 70044623-000 I/DVC28 II LCB Ch/._* XJ7D! ,C’+,S’’)( Ø123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’, Ill NUMBCHAR=48,CARTID=X’02’ ,TYPE=0770,DUAL=CI*? I CARTNAME=SCIENCE 112 II LFD PRINTOUT - - X X 1. The DVC job control statement has 28 for the logical unit number, indicating that a 0770 printer must be used. 2. This gives the actual character set for the load code buffer. Notice the shaded area; this is where a switch is made from specifying in EBCDIC (C) to hexadecimal (X). We did this because we want to specify a single quotation mark (apostrophe) for the load code. Since a single quotation mark begins and ends each character string, coding the single quotation mark as an EBCDIC character would have terminated the character string, and the remaining characters would be invalid. So, we ended the character string after the last character before the single quotation mark (the asterisk), specified the single quotation mark in hexadecimal (7D), and then continued with the next character (a plus sign) in EBCDIC. The comma character for the load code (after the plus sign) will not end the character string because it’s enclosed within single quotation marks. 3. The NUMBCHAR parameter indicates that there are 48 characters in the print cartridge, if we missed specifying a character in the character string parameter, this would cause an error, so we’d know that we forgot a character. The CARTID parameter indicates a cartridge identifier of 02, and we’re using a 0770 printer (TYPE parameter). The DUAL parameter indicates that three nonprintable characters (?,>, and <) are going to be appearing during the job, and gives the printable characters (*, “, and +) that will replace them. 4. When this print file is opened, the operator receives a message telling him to mount the cartridge named SCIENCE. 5. Provides the file name for the print output file and completes the device assignment set. &15 Making Job Control Work for You Here is a similar example of how the LCB job control statement is used for an SDMA printer: II DVC 220 1/ LCB TYPE=SDMA,CARTNAME=SCIENCE Some points to remember when coding the LCB job control statement are as follows: • You can always specify the CARTNAME and TYPE parameters. • If you specify NAME to indicate a filed load code buffer, you cannot specify any other parameters except CARTNAME, TYPE, and MISM. • If you’re using the job SG$PRB to change a filed load code buffer, use symbol to specify the name of the buffer rather than NAME. Using Forms Control A vertical format buffer controls a printer’s vertical form spacing. This applies to the 0770, 0776, and 0789 printers. Codes corresponding to specific lines on a printer form are loaded into the vertical format buffer. You advance the form to a particular line by issuing a skip command in your program and specifying the code. The default vertical format buffer for each printer type is set at SYSGEN time. You can use the VFB job control statement to specify a unique vertical format buffer for a print file. You must place the VFB job control statement within the device assignment set for the printer file to which it applies. The II VFB statement becomes effective when your program opens the print file. The format of the VFB job control statement is: //tsymbot] VFB LENGTH=tines [,FORMNAME=symbol] [USE= I L STAND1 OWNVF1 OWNVF2-OWNVF9 [DENSITY= r ,TYPE= L (SDMA and 9215 printers only) {}1 SDMA 0770 0776 [,OVF=(line-1,...,line-n)] 1 E,OVF . ..,tine-n))[,CD1=(tine-1,...,l 2=(1in e1 ine-n),... £,CD15=(line-1,...,line-n)]] [,HP=n] 6-16 70044623-000 Making Job Control Work for You The symbol in the label field is a 1- to 8-alphanumeric character name and can have one of the following uses: • To specify a default form name when you omit the FORMNAME parameter. • To specify the name of a filed vertical format buffer that you’re changing via the job SG$PRB. Use of symbol will become more clear after we discuss the FORMNAME and USE parameters. The LENGTH parameter indicates how many lines are on a form in the range of 1 to 192. You must use this parameter whenever you specify any of the VFB statement parameters for forms overflow (OVF1 ,OVF2) or vertical line positioning (CD1 ,...,CD15). LENGTH must also be specified whenever you specify DENSITY. The FORMNAfi/IE parameter specifies the name of the printer form to be used. (This is very useful when you want your output printed on a special form.) Your installation is responsible for assigning a unique, 1- to 8-alphanumeric character name to each form. PAYCHK, for example, could be the name used for payroll checks. When you provide a form name in the II VFB statement, the operator is requested to place that form in the printer before the file begins printing. The output is not printed until the operator loads the form and replies to the message. Remember, if you don’t specify a form name, the form that’s already in the printer is used. So, to ensure use of the proper form and to avoid printing on any valuable special forms, you should always specify a form name. Remember, you can specify a form name using any of the following: • The SPOOL JPROC (See “Controlling Spooled Output with a JPROC Call” in Section 5.) • The SPL job control statement (See “Controlling Spooled Output with a Job Control Statement” in Section 6.) • The symbol in the label field of the VFB job control statement (A form name specified this way takes precedence over a form name specified with II SPOOL or II SPL.) • The FORMNAME parameter of the VFB job control statement (A form name specified this way takes precedence over a form name specified with II SPL, //SPOOL, or the II VFB statement’s symbol.) 70044623-000 6-17 Making Job Control Work for You You specify the USE parameter when you want to use one of the filed vertical format buffers (either STAND1 or OWNVFn) established at SYSGEN time or via the job SG$PRB. There is a unique STAND1 and OWNVFn for each printer type. USE indicates that you want a filed vertical format buffer you’re not establishing your own. Therefore, FORMNAME and TYPE are the only other parameters you can specify when you specify USE. - As mentioned earlier, you can use symbol for the name of a filed vertical format buffer. This is done only if you are executing the job SG$PRB to change a filed buffer (STAND1 or OWNVFn). If this is the case, you specify either STAND1 or OWNVFn in the symbol field. You don’t specify the USE parameter. This is the only time symbol indicates a vertical format buffer name. At all other times it indicates a default form name if you omit the FORMNAME parameter. See the appropriate installation guide for more information about SG$PRB. DENSITY indicates the number of print lines per inch. (The default is 8.) An 11-inch form, for example, printed at a density of 8 lines per inch has 88 lines; this same form printed at a density of 6 lines per inch would have 66 lines. Note: Ifyou change the print density for a print file, the forms mount message is displayed to your operator. This occurs even if the form name remains the same, and the form is not to be changed. Once alerted, your operator must reply to the message before any output printing can occur. We refer to the remaining parameters of the VFB job control statement as skipcodes. These codes indicate forms overflow and vertical line positioning. When you specify any one of these, you must also specify the LENGTH parameter because line is a decimal number in the range of 1 to whatever amount is specified by the LENGTH parameter. When only one line is specified for a code, you may omit the enclosing parameter. If you accidentally repeat a code for the same line, the first one is accepted and the others are ignored. (In this case, a warning message is displayed.) The OVF parameter specifies the forms overflow line indicator. When an overflow code is placed in the vertical format buffer, any space operation (such as print and space) that advances the form to or beyond the overflow position causes the hardware to detect and indicate forms overflow. You can specify multiple overflow indicators. For example, you might indicate a forms overflow routine through your program that prints subtotals, and another overflow routine that goes to the top-of-forms (home paper) position of the next page. The OVF2 parameter specifies a secondary forms overflow position for use with the 0770 printer. You can specify multiple overflow indicators. For example, if you’re going to print payroll checks and there are only 10 print lines for each check, setting up a vertical format buffer at only 10 lines is impractical. Every time 10 lines are printed, the vertical format buffer is rechecked to find the specifications for the next paycheck (spacing, etc.), even though it’s the same form with the same spacing. This takes time. But if you set up the vertical format buffer length for, say, 60 lines, you could defme 6 paychecks in one buffer. In this way, the vertical format buffer is checked after every sixth form instead of after every form. C 6-18 70044623-000 Making Job Control Work for You When you design the VFB, bear in mind that lines can be printed (and the form advanced) beyond the overflow position. For printing of assemblies, librarian runs, dumps, etc., you should provide at least four lines between the overflow position and the bottom of the form. The user should always specify an OVF parameter if the file is to be spooled or if you specify the LENGTH parameter. The CD1 through CD15 parameters are for the device independent control character codes. These codes are used for vertical line positioning. For example, CD1=5 means, every time this code is detected, each page of your report is skipped to the fifth line. Not all codes may be used with all printers. The Consolidated Data Management Macroinstructions Programming Guide, 7004 4607, lists the appropriate control character codes for your printers in the section that explains the control printer forms macroinstruction. The HP parameter specifies the line number location of the home paper position. Notes: 1. In a spooling environment, space must be reserved for all lines with assigned skip codes. Ifyou specify a / / VFB statement for a spooled file and provide a full vertical format buffer specification (you do not specify a filed vertical format buffer with USE or symbol), job control reserves enough space. If, however, you request a filed vertical format buffer (STAND1 or OWNVFn) that has more than seven skip codes, or ifyou use a system default vertical format buffer having more than seven skip codes, you must specify the number of skip codes using the no-skpcode parameter in the II SPL statement or the SKIPCODE parameter in the / / SPOOL JPROC. When you don’t use a / / SPL statement or / / SPOOL JPROC, the default is seven skip codes. Three skip codes are automatically included in this count: home position for current page, overflow for next page, and home position for next page. The four remaining are user-specified skip codes. Therefore, the / / SPL statement and the II SPOOL JPROC specify the total count of lines on your form where a skip code is allowed, plus three. 2. Repeat occurrences of the same skip code on more than one line are counted as separate skip codes. Consider the following. Suppose you want to produce a report on a special 11- by 14inch form that prints 12 lines of data at 6 lines per inch (lpi), then skips 3 lines; prints another 12, skips 3; and so forth down the page a total of 4 times. Your VFB statement might look like this: If VFB FO=WORKSHT,DE=6,LE=66,OV=61 70044623-000 6-19 Making Job Control Work for You You would have to identify your special printer form (WORKSHT) to the operator so that it can be loaded on an available printer. Specify your desired printing density in terms of lines per inch (lpi). Specify the overall length of the form as a function of the number of lines that could be printed on the form; in this case, 66 (6 ipi xli inches). And, finally, specify the line on the form at which you want the printer to advance the paper to the top of the next page, which is called the home paper position. This parameter is sometimes critical because the location of the home paper position depends on where the operator physically aligns the form on the printer. If the home paper position has been set by the operator to line 4 of the form and your program prints before skipping any lines, the first print line will occur on line 4. C If we assume that the form we’re using is meant to be loaded at line 4 and that our program prints before skipping, our OV specification would be 61 as shown in the example. This would allow us to print 48 lines and skip 9, before advancing the paper to the next top-of-forms, or home paper position (4 + 48 + 9 = 61). If, however, the operator loads our form at print position 2, instead of 4, our OV specification would have to be 59, instead of 61, to maintain our desired page format. The obvious lesson in this example is that you must tell the operator how to load a special form when your output format is critical. Most of the time, you’re not concerned with the exact number of lines that are printed, but only that the printed output not continue beyond a reasonable line on the form. Some points to remember when coding the VFB job control statement are as follows: • You can always specify the FORMNAME and TYPE parameters. • If you specify USE to indicate a filed vertical format buffer (STAND1 or OWNVFn), you cannot specify any other parameter except FORMNAME and TYPE. • If you’re using SG$PRB to change STAND1 or OWNVFn, use symbol to specify the name of the buffer instead of USE. • If you specify DENSITY, you must specify LENGTH. • If you specify any codes (OVF1, OVF2, CD1 through CD15), you must specify LENGTH. • If you specify LENGTH, you should specify at least one overflow code (OVF). Controlling Tape Units You use the MTC job control statement to position a tape volume prior to or after job step execution. With it, you can move the tape volume to a certain block within a file or to a certain file within a multiple volume. A tape volume can also be rewound to a load point, rewound and unloaded, or have tape marks written. C,’ 6.20 70044623-000 Making Job Control Work for You You must insert the MTC job control statement at a point after the device assignment set for that tape unit. The format of the MTC job control statement is: /I[symbol) MTC lfdname, BB,nn BM,nn FB,nn FM,nn WM, nn RL RU The lfdname parameter specifies the same file name that was used in the device assignment set for the tape volume. The next parameter provides seven choices; they indicate the type of operation you want done. They are: BB BM FB FM WM RL RU - Backspace a specified number (nn) of blocks. - Backspace a specified number (nn) of tape marks. - Forward space a specified number (nn) of blocks. - Forward space a specified number Cnn) of tape marks. - Write a specified number (nn) of tape marks. - - Rewind to load point. Rewind and unload the tape volume. The amount, nn, must be a decimal number. The relationship between the number of tape marks to the number of files on a volume is covered in the Consolidated Data Management Macroin.structioris Programming Guide, 7004 4607. The following example shows how the MTC job control statement is used: II II II II If II 11 I? 1/ I& JOB TAPELIST DVC 90 VOL T123 LFD TAPEIN DVC 20 LFD PRNT MTC TAPEIN FB,10 EXEC TPRNT MTC TAP1N RU II FIN The first MTC job control statement spaces tape T123 forward 10 blocks prior to job step execution. The second MTC job control statement rewinds and unloads the same tape after the job step is finished. Note that the lfdname parameter of both MTC job control statements agrees with the filename parameter of the LFD job control statement. 70044623-000 62l Making Job Control Work for You C Releasing (Freeing) a Device and Volume Once a device and a volume are assigned to a job, they remain assigned until the job is finished. This assignment applies to all job steps of the job. But, what if your job has 10 job steps, and a certain device or volume is only used in the first job step? In effect, they can’t be used by any other job until this entire job is complete. You can use the FREE job control statement to release the device and volume immediately after it is no longer needed, even though the job is not completed. However, if a device and volume are released during one job step and either one is requested in a later job step in the same job, no release occurs. This protects you from not having a needed device or volume available because it was released too soon. Remember, the entire control stream is scanned before the job begins executing. The format of the FREE job control statement is: //[symbot] FREE tfdname-1[[(DEV)),...,lfdname-n[(DEV)]] The lfdname parameter specifies the same file name used in the device assignment set for the file. The (DEW parameter indicates that the device and volume are to be released. There is no comma between the lfdname and (DEV) parameters. Note: 6-22 You should always specify (DEV) even though it’s shown as optional. Additionally, you must specify (DEV) to free unit record devices such as card readers, card punches, printers, and workstations. 70044623-000 Making Job Control Work for You Here’s an example of a multiple-job-step job. The first job step needs the card reader. After that, it’s not needed. 1/ JOB PAYROL 1/ DVC 50 // VOL DISKO1 II LBL DETAILS II LFD PRDISC 1/ DVC 30 /1 1,FD READeI II EXEC CARDTP If FREE READ1(DEV) 1/ EXEC EDIT II EXEC BALANC 1/ EXEC NEGBAL If EXEC WORKP Job steps that do&t need the reader If FIN data file 1* You can also use II FREE to allow a job to be scheduled that appears to use more volumes or devices than are available. Suppose, for example, that ajob (PAYROL) uses four cataloged tape volumes. Your system has only two tape drives. The system assumes, for cataloged volumes, that each unique volume requires a unique device. Your job is not scheduled because there are not enough unique devices available for each unique cataloged volume. You can get the job scheduled, however, if you use the FREE statement to release the tape drives once the first two volumes have been accessed. During execution of the job, you are still protected from a needed device or volume being unavailable, because no actual release occurs if II FREE specifies a device or volume needed in a later job step. Your job stream might look like this: II II 1/ II 1/ If II II II 1/ 1/ II II JOB PAYROL LBL FILA LFD TAP1 LBL FILB LFD TAP2 EXEC STEP 1 FREE TAP1(DEV) FREE TAP2(DEV) LBL FILC LFD TAP3 LBL FILD LFD TAP4 EXEC STEP2 Your job is scheduled, even though your system has only two tape devices, because the drives are freed after the first job step. During execution of the job, volumes A and C use one tape drive and volumes B and D use the other tape drive. /1 FREE can be used to release a workstation when it’s no longer needed by a job. You specify the workstation lfdname as it appears on the LFD statement in the workstation’s device assignment set and code the FREE statement as follows: 7004 4623-000 6-23 Making Job Control Work for You 1/ FREE WRKSTN(DEV) If this statement is specified, all workstations connected to the file are freed. Scratching Unwanted Files Once a disk or diskette file is no longer needed, it might as well be scratched, making the space available for some other file. The SCR job control statement does this. Any file or extent specified on this job control statement is scratched as soon as the SCR job control statement is encountered by the job step processor. Therefore, the SCR statement should only be specified after any job steps needing that particular file are executed. Only files on volumes that are currently mounted when the SCR job control statement is encountered are scratched. You can’t use the SCR job control statement to delete a file on SYSRES that has $Y$ as the first three characters of the file label, and you can’t use it to delete the $Y$RUN file from the RUN volume. Only one volume serial number may be specified for any SCRjob control statement. The format of the SCR job control statement is: //[syinbot]SCR tfdname[ L fDATE[,yyddd] 1PRE[,aaaa] The lfdname parameter specifies the file name (of the file to be scratched) used in a previous device assignment set in the control stream. Within that assignment set, you must specifr the volume serial number and the file identifier. But, if you’re working with a disk file and the next parameter is either DATE or PEE, you may omit the LBL job control statement from the relevant device assignment set. C 6-24 7004 4623-000 Making Job Control Work for You The DATE and PRE parameters are used only for disk flies. When you use the DATE parameter, all files on the disk volume that have an expiration date earlier than the current system date are scratched. If you want to use a date other than the current system date, include the yyddd parmeter as part of your specification (where yy is the year and ddd is the day leading zeros must be specified). When you specifSr a date, all the files on the disk volume dated earlier than the date specified are scratched. - The PRE parameter indicates that all files on a disk volume with a certain prefix are to be scratched. You specify this prefix as the next 1-to-S-character parameter. The first three characters of this prefix, however, cannot be $Y$ if the volume is SYSRES. If you omit the aaaa parameter, the first four characters of the file identifier from the associated LBL job control statement are used as the prefix. If this parameter (DATE and PRE) is omitted, the entire file specified by the lfdname parameter is scratched. Here are three examples: II II II II DVCVOL DSPØ28 LBL PAYROLLDETAILS LFD PRDET SCR PRDET In this first example, the entire file identified as PAYROLLDETAILS is scratched. The filename parameter of the LFD job control statement and the lfdname parameter of the SCR job control statement must agree. II DVCVOL DSPØ28 II LFD DELETES II SCR DELETES,DATE,76002 In this example, all files on disk volume DSPO28 that have an expiration date earlier than the second day of the year 76 are scratched. Notice the absence of an LBL job control statement. When you use either the DATE or PRE parameter, an LBL job control statement isn’t needed. II II II II II 70044623-000 DVC VOL LBL LFD SCR 130 DKTOO1 ADDRFILE ADDR1 ADDR1 6-25 Making Job Control Work for You Our last example shows an entire file being scratched on our format-label diskette. Remember, the filename parameter of the LFD job control statement and the lfdname parameter of the SCR job control statement must agree. Notes: 1. The file to be scratched should not be in use by anotherjob. 2. After an SCR job control statement is processed, the file is no longer available. You can’t even refer to this file with another SCR job control statement or a FREE statement. File Cataloging The file catalog ($Y$CAT) is a system resident file. It contains entries consisting of file information about tape, disk, and diskette files in the system. The catalog enables easy access to this file information for jobs and can also restrict files only to authorized users. The CAT, DECAT, and QUAL job control statements and a special form of the LBL job control statement are used to create, access, and decatalog cataloged files. Their use and a complete description of the OS/3 file cataloging facility are contained in the File Cataloging Technical Overview, 7004 4615. The catalog manipulation routine (JC$CAT) is also described there. Selecting Optional Features Unisys Operating Systeml3 provides optional features you can select whenever you want. As you’ll see, some options (such as DUMP and GO) are only effective during the job step in which they are specified, some (such as GABRDUMP, GDUMP, and GSYSDUMP) are effective from the time the option is encountered until end ofjob, while others (such as ACN, BUF, OFT, LOG, and SCAN) are in effect for the entire job because they are acted upon when the run processor prepares the control stream for execution. This is the format of the OPTION job control statement: IltsymboL] OPTION p-1[,...,p-n] 6-26 70044623-000 Making Job Control Work for You As you can see, you can specify as many features as desired, as long as they’re separated by commas (there can’t be any spaces). The features available are: ABRDUMP Provides a main storage dump in the immediate vicinity of the current TCB P5W address. Displays current registers and buffers of all open DTFs. • ACN=account-number Overrides the acct-no specified in the JOB control statement. • BOF Your program is given control with binary overflow interrupt-enabled. • BUF=nxm Overrides the nXm parameter specified in the JOB control statement. • DOF Your program is given control with decimal overflow interrupt-enabled. • DUMP Provides a job region dump at execution time in hexadecimal, ifjob step termination is requested, or a snapshot dump in response to a SNAP macroinstruction. • EOD=xx Supplies substitute characters for the end-of-embedded-data (/*) job control statement. Used when embedded data is DSL source code. The first character specified must be a slash (I). The second character can be anything but a slash, an asterisk, an ampersand, or a currency symbol (I, , &, $). • GABRDUMP Specifies that OPTION ABRDUMP is in effect for every job step from the time GABRDUMP is encountered to end ofjob. • ODUMP Specifies that OPTION DUMP is in effect for every job step from the time GDUMP is encountered to end ofjob. 70044623.000 6-27 Making Job Control Work for You • GJOBD{TMP Specifies that OPTION JOBDUMP is in effect for every job step from the time GJOBDUMP is encountered to end ofjob. • GO Automatically executes a load module after link editing is completed. An OPTION job control statement with the GO feature is generated automatically by the ASMLG JPROC call statement, for example. • GSUB Provides symbol substitution for all embedded data sets in the job stream. This is a global SUB option. • GSYSDUMP Specifies that OPTION SYSDUMP is in effect for every job step from the time GSYSDUMP is encountered to end of job. • HDR= INOHDR HDR NOHDR suppresses the printing of page separators. HDR allows page separators to be printed. OPTION HDR overrides the page separator specification in the JOB control statement. • HOLD Places a job containing it in hold status while the job is in the job queue table. A job containing this option is not released until a BEGIN operator command is issued, or until a CC job control statement with BE specified is encountered in a subsequent control stream. CC BE cannot be used to release a HOLD within the same job. • IMMOVE Prevents memory consolidation movable shuffle in this job step. • JOBDUMP Provides an edited version of a dump if a dump is requested and is in effect only for the job step that contains this option. 6-28 70044623-000 Making Job Control Work for You • LDA Directs job control to set up a 256-byte user local da area (LDA) in the job prologue. This option is provided primarily for IBM Systeml34 compatibility and is used if RPG programs or the assembler uses the LDA. • LINK Automatically executes the linkage editor once the object module is created. This allows you to compile and link edit without intervention from job control. • LOG= (logical-unit-numberScreen format file LFD name II EXEC PRGRM2 When you run YOURJOB, PRGRM2 is executed. PRGRM2 contains an instruction to open WORKSTN, which opens the screen format file FORMAT. For more information about screen formats, see the Screen Format Services Technical Overview, UP-9977. The USE Statement for Menu Services When your program needs to use menu services from a workstation, the USE statement you specify takes this form: //[symbot] USE MENU menu-fite-LFD/$Y$FMT I $Y$FMT/menu-file-LFD L [linitial.menu)[ {flnn} 1 menu-format-1=aL las-if 0 [ 6-74 menu-format-12=alias-12]] 70044623-000 Making Job Control Work for You The USE MENU statement is similar to the USE SFS statement except that the parameters refer to menu formats instead of screen formats. The symbol parameter is used as the target of a branching statement. It is one to six alphanumeric characters long, and the first character must be alphabetic. The first positional parameter provides an LFD name for up to two menu format files. Any name you use must match an LFD name specified in a previously defined device assignment set for a menu format file. (Menu format files are always MIRAM files.) The menu-file-LFD is one to eight alphanumeric characters long. When coding this parameter, remember the following: • If you omit a forrnat-file-LFD name, it is assumed that all menus used reside in the system file $Y$FMT. • When you code /menu-file-LFD, $Y$FMT is examined first, then the file indicated by menu-file-LFD. • When you code menu-file-LFD/, the file indicated by menu-file-LFD is examined first, then $Y$FMT. The initial-menu parameter specifies the name of the first menu format to be used by the application program. It is one to eight alphanumeric characters in length. The nnn parameter specifies the number of menus to be resident in main storage at one time, in the range 1 to 255. The default value is 1. The menu-format=alias parameter equates a menu format name specified in an application program (alias) to the actual menu format name (given when the menu was created). A maximum of 12 alias name sets may be specified. The menu-format name and alias names may each be from one to eight alphanumeric characters in length. 7004 4623-000 6-75 Making Job Control Work for You The control stream for a job that uses menu format services could include these job control statements: C If JOB YOURJOB II II II II DVC VOL LBL LFD 50 ABC MENUFILE MENU1 If DVC 200 II USE MENU,MENU1 /1 LFD WORKSiIf Device assignment set for the menu format file Device assignment set for the workstation Menu format file LFD name II EXEC PRGRM1 /& When you run YOURJOB, PRGRM1 is executed. PRGRM1 contains an instruction to open WORKSTN, which opens the menu format file MENU1. For more information about menu services, see the Menu Services Technical Overview, UP-931 7. The USE Statement for Dialog Processing When your job needs the dialog processor to manage a dialog session at a workstation, the USE statement you specify takes this form: II[symbot] USE DP,dia[og-name[,printer-I.fd][,new-auditlfd][,old-audit-Lfd) The files specified in the USE DP statement must have been previously identified (through device assignment sets) in the control stream. The symbol parameter is used as the target of a branching statement. It is one to six alphanumeric characters in length, with the first character being alphabetic. The dialog-name parameter specifies the name of the dialog you want to use; it must match the LFD statement of the dialog file’s device assignment set. It is one to eight alphanumeric characters in length. C 6-76 7004 4623-000 Making Job Control Work for You The printer-lfd parameter specifies the name of the printer file. It must match the LFD statement of the printer’s device assignment set. It is one to eight alphanumeric characters in length. This parameter is specified when you want to produce a printed summary of the dialog session. The new-audit-lfd parameter specifies the name of the new audit file output by the audit version of the dialog processor. It must match the LFD statement of the new audit file’s device assignment set. The new audit file contains a record of your responses to a current dialog session. This parameter is one to eight alphanumeric characters in length. The old-audit-lfd parameter specifies the name of the old audit file used as input to the audit version of the dialog processor. It must match the LFD statement of the old audit file’s device assignment set. It is one to eight alphanumeric characters in length. The old audit file contains a record of your responses to a previous dialog session. The control stream for a job that calls the dialog processor could contain these job control statements: II JOB MYJOB 1 //DVC2O /1 LFD PRNTR II II /1 If DVC5O VOL DSKO1 LBL NEWAUDITFILE LFD AUDIT1 If II II II DVC VOL LBL LFD f Device assignment set for the printer 1 Device assignment set for the new audit file f 51 DSK02 DIALOGFILE D!ALOG1 Device assignment set for the dialog file II DVC 200 II USE DP,DIALOG1,PRNTR,,AUDIT1 1 II LFD WKSTN — II EXEC PRURM1 /& — Device assignment set for the workstation New audit file tfd Printer tfd Dialog name When you run MYJOB, PRGRM1 is executed. PRGRM1 contains an instruction to open WKSTN, which, when processed, causes DIALOG1 to execute at the workstation. Your responses to DIALOG1 are routed back to PRGRM1. 70044623.000 6-77 Making Job Control Work for You c-) For more information about dialog processing, see the Dialog Processor Programming Guide, UP-8858. Source Module Access via the USE Statement Your programs can write (create) or read a source module that you identifSr in the USE LIB job control statement. When included in the device assignment set for a library file, II USE LIB indicates that the file contains source modules and the specified module will be accessed by your program. The format for II USE LIB is: //[synibot] USE LIB,modutename ,TYPE= S M 0 L The module name you specifSr can be from one to eight alphanumeric characters long and the first character must be alphabetic. The following job control stream indicates that PROG1 will access a source module named MODULE1. II JOB READMOD /1 II II II II c DVC5Ø VOL 01234 LBL SRCLIB1 USE LIB,MODULE1 LFD SRCMOD II EXEC PROG1 I& Note: Access of a source module by your program is limited to either a sequential read or sequential write operation. C 6-78 70044623-000 Section 7 Run-Time Conditional and Set Symbol Job Control Statements Run-Time Conditional Job Control Statements GO, IF, and NOP are run-time conditional job control statements. They allow you to branch to other job control statements in the control stream. Unlike SKIP job control statements (effective during execution of your program), they are interpreted and acted upon while the run processor is scanning the control stream, and then stripped from the stream. Therefore, any devices and volumes specified on the bypassed job control statements need not be available. Only forward branches are allowed for runtime conditional statements. Because GO, IF’, and NOP are processed only by the run processor and their actions are completed when the run processor has acted upon them, they are very useful when writing job control procedure (JPROC) definitions. Unconditional Branching The GO job control statement causes an unconditional branch to another job control statement identified by a symbol. The destination can be a set symbol with a value determined when the job stream is analyzed. The format of the GO job control statement is: //[symbol] GO destination The symbol is only used when this job control statement is the target of another GO or IF job control statement. The destination parameter identifies the target job control statement and must agree with the symbol in the label field of that statement. Like the other run-time conditional statements, the GO job control statement is acted upon by the run processor, before a job is scheduled, and then deleted from the control stream. For this reason, the devices and volumes skipped by a GO statement need not be available when the run symbiont is scanning the control stream. Note: 70044623-000 Unlike GO, SKIP is effective during the execution of a program. Because ajob is not executed until all the devices and volumes it uses are available to the system, devices and volumes bypassed by SKIP must be available or the job won’t be scheduled. However, devices and volumes bypassed by a SKIP statement can’t be referenced in subsequentjob control statements in the control stream because, even though they are available, they have not been completely identified to the system. 7-1 Run-Time Conditional and Set Symbol Job Control Statements The following is a stored control stream similar to the one shown with the SKIP job control statement. (See “Bypassing Job Control Statements” in Section 6.) JOB BALANCE CR DVC 90 VOL MASTO1 LBL DETAILS LFD TAPEIN GO DOlT //CARD DVC 30 II LFD CARDIN //DOlT EXEC EDIT /& 1/ FIN II II II II ii II II If the input is on cards, you would place the following stream in the card reader: Job control statements inserted in the stored stream when II CR is encountered. II GO CARD If FIN data cards 1* - Input card file When the first CR job control statement from the stored control stream is encountered by the run processor, it transfers control to the card reader, where the GO job control statement causes the device assignment set for the tape to be skipped without any processing. The tape volume and the device that would use it do not have to be available. Therefore, they can be used by another job. If the input is on tape, a FIN job control statement is all that’s needed in the card reader. The tape device assignment set would be read, and the stored GO job control statement would cause the device assignment set for the card reader to be bypassed. Conditional Branching The IF job control statement causes a conditional branch to another job control statement, depending upon certain test conditions. This is similar to using the SKIP job control statement conditionally, except that it’s interpreted and acted upon by the run processor, just like the GO job control statement. The format of the IF job control statement is: //Esymbot] IF (a op b)destination The symbol is only used when this job control statement is the target of another GO or IF job control statement. The test for a conditional branch is specified as (a op b), where a and b are the two operands to be compared. You can compare two numeric operands (1 op 2) or two alphabetic operands (a op b) but a run processor error results if you attempt a comparison between one numeric and one alphabetic operand (1 op b). C 7-2 7004 4623-000 Run-Time Conditional and Set Symbol Job Control Statements The op in the expression is the relational operator that specifies the type of comparison to be done. The values for op are: EQ NE GT LT GE LE - - - - - - aisequaltob a is not equal to b a is greater than b aislessthanb a is greater than or equal to b ais less than or equal tob Remember, whenever you enclose an operand in quotes, the quotes are considered a part of the operand. For example, (‘a’ EQ a) is an allowable comparison but the operands are not equal because one value is ‘a’ and the other is a. (See “Specifiing Set Symbol Values in Quotes” later in this section for more information.) The operands are separated from the relational operator by spaces and the entire parameter is enclosed within parentheses. Note: If a numeric comparison is made and neither a nor b is numeric, both the greater than and less than conditions are set, resulting in all conditions except equal being allowed to branch. If a character compare is being used and the two operands are not of the same length, then the comparison is made on the number of characters present in each, rather than on the contents of the operands. Thus, a string offive characters will always be less than a string of six characters, regardless of the character content of the comparand.s. Ifyou have specified / / OPTION UNEQUAL, an error message is generated whenever character strings of unequal length are compared. (See “Selecting Optional Features” in Section 6.) The destination parameter identifies the target job control statement that will receive control if the transfer condition is true. This entry must agree with the symbol in the label field of the target job control statement. When scanning for the target job control statement, only the FIN job control statement is acted upon. Therefore, you cannot branch out of the current job stream; any procedure calls or CR job control statements that are skipped are not acted upon. The comparand fields may be variable symbols, or dummy arguments, that can be set in a JPROC definition. They’re called dummy arguments because the variable symbol can be modified when called by the JPROC call. 7004 4623-000 7-3 Run-Time Conditional and Set Symbol Job Control Statements Let’s look at an example. At first, this example will not be totally clear, but when combined with the explanations of the remaining job control statement in this section and the JPROC definitions in the next section, it will become clearer. The only purpose here is to explain how the IF job control statement functions. Consider this example: II IF (‘&IN’ EQ ‘N’)EXIT This job control statement is in a JPROC definition. When the PROC directi ve was written, it contained a parameter called IN. The ampersand of &IN identifies this as a variable symbol; this means, use the value of the IN parameter. EQ is the relatio nal operator. N is a value that can be supplied as a value for IN. Thus, if the value specified by the IN parameter is equal to N, transfer control to the destination supplied by the next parameter, which is EXIT. If IN is not equal to N, contro l is transferred to the job control statement immediately following the IF job contro l statement. Note in the example that spaces precede and follow both IF and the operator EQ. Note also the lack of spaces between the parentheses and the ‘&IN’ and ‘N’ terms and the lack of spaces or a comma before the word EXIT. Providing Targets for Branching The symbols in the label field of the job control statements provide the targets for branching job control statements. But the 1$, 1*, and I& job control statem ents don’t have a label field. You may also want to branch to the end of a JPROC , which is an END directive. This doesn’t have a label field that can be accessed by a branching job control statement. The NOP job control statement allows you to branch to an otherwise unaccessible position in the control stream. The format of the NOP job control statement is: /Isymbot NOP [QUERY] This job control statement provides a target for a branching job contro l statement. The symbol must agree with the target defined in the sending job control statement. The optional QUERY parameter is used when you want to take advantage of the label-skipping facility of II OPTION QUERY. This facility is availab le to workstation users and console operators. The following is an example based on the IF job control statement example shown earlier in “Conditional Branching” and using the END directive as the target (it’s still within a JPROC definition): 1/ EXEC LISTX II IF (‘&IN’ EQ ‘N’)EXIT II PARAM SPACE=TWO //EXIT NOP END C 74 70044623-000 Run-Time Conditional and Set Symbol Job Control Statements Notice that the IF job control statement was placed afer the EXEC job control statement. This is allowable since it’s a run-time conditional job control statement, which is acted upon by the run processor and then stripped from the control stream. Note: You can use the NOP statement to place comments in your control stream. The comment is used in.place of the QUERYparameter, is separated from the NOP statement by one or more blanks, and is enclosed in single quotes. When used for this purpose, the NOP statement does not have to be the target of a branching statement. Run-Time Set Symbols A set symbol is a type of variable that can be set to a value and used by the run processor as a counter, switch, or value to control a job. Because the run processor is responsible for making set symbols effective, they are called run-time set symbols. There are two types of set symbols: • GLOBAL A global set symbol, once declared, can be referenced anywhere in the basic control stream as well as in any JPROC definition the control stream calls. • LOCAL A local set symbol can only be declared and referenced within a JPROC definition. (If a local and a global set symbol have the same name, the local symbol is used within the JPROC.) You use the following to declare run-time set symbols. • II GBL, II QGBL, RUN/RV (command), II RUN/RV Declare global set symbols only. • IIJSET Declares local set symbols and (if specified in a basic control stream after II GBL or II QGBL) can be used to supply or change the value of a global set symbol (without changing the symbol’s status to local). Global Status Set Symbols The GBL job control statement can be used to declare global set symbols. This statement may appear anywhere in the control stream, and the symbols are global from the point of declaration forward. 7004 4623-000 7-5 Run-Time Conditional and Set Symbol Job Control Statements The format of the GBL job control statement is: //[symbol]GBL set-id-1E=init-I][,set-i&2E=init-2 ), . . .,set-id-nt=init-n)) The set-id parameter specifies the name of the set symbol. The mit parame ter assigns a value to the set symbol, provided a value has not already been assigned. For example: II JOB MYJOB 1/ GBLPRNTR=20 The set symbol defined in the preceding II GBL statement is PRNTR and the value of PRNTR (&PRNTR) is 20. The value 20 is substituted any time you referen ce this symbol by &PRNTR later in the control stream, or in any JPROC the contro l stream calls. For example: If JOB MYJOB 1/ GBLPRNTR=20 II DVC &PRNTR=20 1/ LFD PRTFIL Note: 1 j The value 20 is substituted for &PRNTR when the run processor encounters this statement. The result is 1/ DVC 20. The & used when referencing a set symbol is never used when defining the set symbol in the GBL job control statement. The value assigned by the mit (value) parameter is used only if a value is not assigned by a preceding II GBL statement; is not assigned in the RUN/lW comma nd (the RUN/RV job control statement if you’re initiating one job from anothe r); is not changed later in the control stream by all JSET statement. Consider the following: 1/ JOB MYJOB II GBLPRNTR=20 1/ GBLPRNTR=26 C, 7-6 7004 4623.000 Run-Time Conditional and Set Symbol Job Control Statements The value assigned by the first GBL job control statement applies for the entire control stream any time &PRNTR is referenced. The second GBL job control statement does not result in an error condition but has no effect on the value of PRNTR. (You can use a JSET job control statement in place of the second GBL job control statement to change the value of PRNTR. JSET is discussed in “Local Status Set Symbols” later in this section.) The effect of specifying a global set symbol and value in the RUN/RV command is as if II GBL is inserted directly after the II JOB statement in the control stream. If, for example, you use RV MYJOB,,PRNTR=28 to initiate a job, II GBL PRNTR=28 is considered the first statement in the stream. You can reference &PRNTR any place in the job stream and the run processor will substitute the value 28. Consider the following: /1 JOB MYJOB • • ii DVC &PRNTR II LFD PRTFIL Note: 1 The global set symbol PRNTR was defined and given a value of 28 in the RUN/RV comand. The run processor substitutes 28 for &PRNTR resulting in II DVC 28. Remember to include a II OPTION SUB statement in your control stream if you want values substituted for set symbols referenced in embedded data. If you include all GBL statement for PRNTR in your control stream specifring one value, and initiate that stream with a RUN/RV command specifying another value for the same symbol, the value specified on the RUN/RV command is used. If, for example, you use RV MYJOB,,PRNTR=28 to initiate the following stream: II JOB MYJOB II GBLPRNTR=20 II DVC&PRNTR II LFD PRTFIL the value 28 is substituted for &PRNTR. The value 20 is used only if you don’t supply a value for PRNTR in the RUN/RV command. 7004 4623-000 7.7 Run-Time Conditional and Set Symbol Job Control Statements Whenever you specify a set symbol in the II GBL statement without a value (for example, II GBL PRNTR), you must use the RUN/RV command to supply the value, or provide a value using the II JSET statement before the symbol is referenced. Otherwise, the value of the symbol is considered null. This may or may not be desired. Consider the following GBL job control statement: II GBL PRNTR,TOKEN=DKIN This statement declares global status for the set symbols PRNTR and TOKEN. The value of TOKEN is DKIN. The value of PRNTR was previously defined in the RUN/RV command, will be defined later in a JSET job control statement before &PRNTR is referenced, or is a null value. When coding the GBL job control statement, you cannot use the statement continuation; specify separate II GBL statements. With the QGBL job control statement, interactive users can declare global set symbols in a job control stream and then specify values for those symbols through the workstation at job run time. The format of the QGBL job control statement is: II[symbol] QGBL setid-1E=init-1]E,set-id-2t=init-2],. ..,set-id-n[=init-n]] The set-id parameter may be a maximum of eight characters and the mit (value) parameter may be a maximum of 60 characters. When you run a control stream containing all QGBL statement, the specified set symbol is displayed at the workstation and you’re asked to provide a value for the set symbol. A null response may indicate that a (default) value specified in the QGBL statement is valid. Suppose you build a job control stream that includes these statements: 1/ If If If JOB MYJOB QGBL DVC=20 DVC &DVC LFD PRNTR I& When you initiate the control stream (RV MYJOB) and the run processor encounters the II QGBL statement, the following is displayed on the workstation screen: 03 ? JOB=MYJOB SYMBOL=DVC VALUE=20 *ENTER VALUE If you don’t enter a value on the following line (for example, 03 22, indicating a specific printer), the value specified in the II QGBL statement (20) is substituted for &DVC. C 7-8 7004 4623-000 Run-Time Conditional and Set Symbol Job Control Statements Suppose you write the following job control stream to prep a data-set-label diskette: 1/ II /1 II /1 II 1/ II II Is JOB PREPDSL QGBL ADDR,VSN,RCSZ,SPIRL,IPL DVC 20 LFD PRNTR DVC 130,&ADDR VOL X(NOV) LFD DISKIN OPTION SCAN,SUB EXEC DSKPRP SERNR=&VSN,RECSZ=&RCSZ,SPIRL=&SPIRL, IPLDK=&IPL VOL1 1* Is The// QGBL statement declares five global set symbols. One is referenced in the DVC statement for the diskette device. The other four are referenced in the embedded data. (The embedded data consists of keyword parameters whose values provide necessary information for the diskette to be prepped.) When you initiate the job at your workstation using RV PREPDSL, and the run processor begins job processing, the following occurs: • A workstation screen display asks you to supply values for each of the set symbols declared by the// QGBL statement. For example: JOB=PREPDSL SYMBOL=ADDR VALUE IS NULL *ENTER VALUE (Assume that 320, DKOO1, 128, Y, and Y are the values you specify for ADDR, VSN, RCSZ, SPIRL, and IPL, respectively.) • When DVC 130,&ADDR is encountered, the run processor substitutes the value 320 resulting in II DVC 130,320. (Had a null response been entered, then a physical device would not be assigned.) • When the embedded data is encountered, the rim processor substitutes the specified values (provided, of course, you included all OPTION SUB statement in the job control stream) resulting in SERNR=DKOO1, RECSZ=128, SPIRL=Y, and IPLDKY. For information about prepping diskettes, see the Systems Service Programs (SSP) Operating Guide, UP-8841. If global symbols declared by II QGBL are given values through any other means (a RUN/RV command, all GBL statement in the control stream, all JSET statement in the control stream), you won’t be asked to submit a value at the workstation even though the stream includes all QGBL statement. 70044623-000 7-9 Run-Time Conditional and Set Symbol Job Control Statements Local Status Set Symbols The JSET job control statement can be used to define a local set symbol or to change the value of a global set symbol without changing its status to local. The format of the JSET job control statement is: I/symboL JSET value The symbol specifies the name of the set symbol. The value of this set symbol is coded as the value parameter. It may be a character string up to eight characters long enclosed by apostrophes, if it contains blanks. For example: 1/ PRNTR JSET 20 (The symbol PRNTR is given a value of 20.) Now, consider the following: I/PRNTR JSET &DEVICE In this statement, PRNTR will have whatever value is given to DEWCE. The value for DEVICE can be supplied via the RUN/RV command, in a preceding II GBL or II QGBL statement, in a JPROC call, or even in II JSET statement specified later in the control stream (for example, I/DEVICE JSET 20). The value can also be a simple 2-term expression such as &A+&B. The operations allowed in a 2-term expression are: Operator Description II Covered quotient, A//B is equivalent to (A÷B-1)/B. / A/B means arithmetic quotient of A and B. * A*B means arithmetic product of A and B. - A-B means arithmetic difference of A and B. + A+B means arithmetic sum of A and B. ** A**B means logical product AND of A and B. ++ A++B means logical sum OR of A and B. A— —B means logical difference XOR of A and B. 7-10 7004 4623000 Run-Time Conditional and Set Symbol Job Control Statements Whenever you’re performing an operation using a JSET statement, the operands upon which the operation is to act must be numeric. Look at this example: II GBL M=1,X2 //MX JSET &M+&X The result of this operation is 1VIX=3. If both the operands are not numeric, the operation is not performed and the result is a concatenation of the values. If M had been set with the value of A in the preceding example, the result would have been MX=A÷2. The operation would not have been performed. You can also use the JSET control statement to establish a null value. This can be done by specifying either: f/symbol JSET or I/symbol JSET 1 Leading zeros are not maintained for multiple-digit numeric values in a JSET control statement. If a leading zero is required when the symbol is used, it must be created via a second JSET control statement. For example, if you want the value of symbol P to be 08, assign another symbol (K in this example) the value of 0, like this: I/K JSET 0 Assign symbol P the value of 8, like this: I/P JSET 8 When P is referenced, it must be prefixed by K Thus, the value of &K&P is 08. As mentioned earlier, when you define a set symbol in a JPROC using II JSET, the symbol is considered local and can only be referenced within the JPROC. JSET, however, also allows you to change the value of a global set symbol without changing its status to local. For example: /1 JOB MYJOB II GBL PRNTR=20 //PRNTR JSET 28 70044623-000 This statement changes &PRNTR to 28. PRNTR is still a global set symbol. 7-11 Run-Time Conditional and Set Symbol Job Control Statements If you define a global set symbol in the RUN/RV command or a GBL statement and you don’t specify a value (for example, RV MYJOB,,PRNTR or II GBL PRNTR) you can simply use II JSET to provide one or more values for PRNTR. For example: If JOB MYJOB • //PRNTR JSET 28 • //PRNTR JSET 20 • PRNTR was defined in the RUN/RV coninand or a previous /1 JSET assigns 28 for the value of PRNTR. Any time the run processor encounters &PRNTR, 28 is substituted until the next /1 JSET is encountered. II GBL statement. This statement changes &PRNTR to 20. Any time the run processor encounters &PRNTR, 20 is substituted until the end of job. Specifying Set Symbol Values in Quotes There are certain considerations you should take when assigning a value enclosed in quotes to a set symbol. Whenever you use II GBL or II QGBL to assign a quoted value to a set symbol, the quotes are always considered part of the value. For example: /1 GBL X=’ABC’,Y=XYZ The value of X (&X) in this case is ‘ABC’ while the value of Y (&Y) is XYZ. This is worth remembering especially if &X will be involved in a comparison using the IF job control statement. (See “Conditional Branching” earlier in this section.) If, for example, the value of X is set to ‘ABC’ as follows: II GBL X=’ABC’ the following statement represents a character comparison match: II IF (&X EQ ‘ABC’)LABEL This statement results in a branch to LABEL because the value of X is ‘ABC’ and the value you’re comparing X to is ‘ABC’. Consider the following statement: II IF (&X EQ ABC)LABEL This is not a character comparison match because the value of X is still ‘ABC’ while the value you’re comparing X to is ABC. 7-12 7004 4623000 Run-Time Conditional and Set Symbol Job Control Statements A different situation exists when you use II JSET to assign a quoted value because II JSET always removes one level of quotes (if any). Consider the following: lix JSET ‘ABC’ The value of X (&X) is ABC. fiX JSET ‘‘ABC’’ The value of X (&X) is ‘ABC’. IIX JSET ABC The value of X (&X) is ABC. //X JSET ‘‘ABC’’ The value of X (&X) is ‘ABC’. lix JSET &X X is now ABC. This should also be considered when specif’ing a comparison with II IF that involved a quoted value assigned by II JSET. Using Symbols to Examine Job and System Related Values and Facilities Through the use of symbols, the INQ job control statement allows you to examine job and system related values (such as jobname, system time, and system date) or to determine the availability of certain facilities (such as DDP and workstations). The II INQ statement has two formats: iisymbot INQ JOB,keyword i/symboL INQ SYS,keyword You use II INQ JOB to examine job related values and facilities and II INQ SYS to examine system related values and facilities. In both formats, symbol defines the variable symbol that is set to a value specified by keyword. The keyword ORI, for example, sets the value of the symbol X in the following statement to the user-id of the job’s originator (the workstation that initiated the job). fiX INQ JOB,ORI If you refer to the value of X (&X) elsewhere in the job control stream, the user-id of the originator will be substituted for that value. Consider the following: ii JOB MYJOB fix INQ JOB,ORI ii OPR ‘DELIVER OUTPUT TO &X’,OPERATOR i& 70044623.000 7-13 Run-Time Conditional and Set Symbol Job Control Statements If USERO1 initiates the job, the run processor substitutes USERO1 for &X so that the operator receives the message ‘DELIVER OUTPUT TO USERO1’. If USERO2 initiates the job, the operator receives the message ‘DELIVER OUTPUT TO USERO2’. Suppose you want to execute a program that can receive input either from a workstation or diskette. If the job is initiated from a workstation, then workstation input is preferred. The II INQ JOB statement, used with the keyword WKS, allows you to determine whether the job is initiated from a workstation. This way you can configure a job control stream that assigns a diskette device or a workstation, depending on the situation. The keyword WKS sets the value of the symbol X in the following statement to either lorO: ii X INQ JOB,WKS If the value of X is 0, it means that a workstation is not initiated for this job. If the value of X is 1, a workstation is initiated for the job. With this in mind, consider the following job stream: ii JOB MYJOB lix INQ JOB,WKS ii IF(&X EQ 0)DSKT ii DVC 200 /I USE SFS ii LFD INFO ii GO NEXT //DSKT /1 VOL ii LBL ii LFD i/NEXT 1 DVC 130 A123 FILE1 INFO EXEC PROG1 This job stream is configured so that the device assignment set for the workstation is skipped if the job is not initiated from a workstation and the device assignment set for the diskette is skipped if the job is initiated from a workstation. Table 7-1 lists all of the keywords that you can use with II INQ JOB and II INQ SYS. 7-14 7004 4623-000 ‘I Run-Time Conditional and Set Symbol Job Control Statements Table 7-1. Keywords and Symbol Values for// INQ JOB and/I INQ SYS Keyword For// INQ JOB For/I INQ SYS Value of Symbol NAME The job name ORI The user-id of the originator HOST The host-id of the originator (null if none) ORID The device-id of the originator if a local workstation WKS 0 if job is not initiated from a workstation 1 if job is initiated from a workstation JBNO A 4-byte job number DDP 0 if remote DDP is not initiated 1 if remote DDP is initiated RES SYSRES volume serial number RUN SYSRUN volume serial number DATE The system date (yy/mnVdd) DAY The day of week (Sunday MM The month (01 through 12) DD The day of month (01 through 31) VY The year (specify last two digits) TIME The system time (hh.mrn.ss.) HOST The system’s own host-id REL The system release-id (w.r.rrr) SUP The supervisor’s name DDP 0 if DDP is not available 1 if DDP is available = 1, Monday = 2, etc.) continued 70044623-000 7-15 Run-Time Conditional and Set Symbol Job Control Statements Table 7-1. Keywords and Symbol Values for// INQ JOB and/f INQ SYS (cont.) Keyword For/I INQ SYS Value of Symbol WKS 0 if workstation support is not configured 1 if workstation support is configured S80 07 if running on model 08 if running on model 10 if running on model 15 if running on model 20 if running on model 50 if running on model SPL 0 if spooling is not configured 1 if spooling is configured JUL Assigns Julian date YYDDD to specified symbol 7E 8 10 15 20 50 Priorities among Set Symbols, Keyword Parameters, and Positional Parameters External to a JPROC definition, the only possibility of substitution is for set symbols. Inside of a JPROC definition, however, the possibility of a set symbol matching a keyword parameter or positional parameter name does exist. (Z: The positional parameter name is maintained as a separate entity. Global set symbols are maintained in a single list. Keyword parameter names and local set symbols are maintained together, with a new definition replacing the old. The effect of keyword parameter names and local set symbols being maintained together is to force keyword parameter names to local status if they are mentioned in JSET job control statements within the procedure. When it’s determined that substitution should be performed, the following steps occur, in the order given: 1. A comparison is made with the positional parameter name. This test is done first, since there is one name with many values, but it’s a relatively fast test. Care must be taken to make the positional parameter name unique with respect to all set symbols and keyword parameter names. A sublisted reference to a keyword parameter cannot be distinguished from a reference to a positional parameter. 2. The list of local set symbols and keyword parameter names is scanned. 3. The list of global set symbols is scanned. C 7-16 7004 4623-000 Run-Time Conditional and Set Symbol Job Control Statements The result is that if a keyword parameter name matches a local or global set symbol within a procedure, the following occurs: 1. A reference to the name obtains the keyword parameter value up until the occurrence of a JSET job control statement for the name. 2. From the point of occurrence of the JSET job control statement to the end of the JPROC definition, the value of the most recent JSET job control statement is used. 3. At the end of the JPROC definition, the value reverts to the value of the global set symbol at the time of entering the procedure. Note: 70044623-000 Remember that set symbol substitution may increase the number of characters in a value. 7-17 Section 8 How to Write and Call a Job Control Procedure Definition The Benefit of Procedure Definitions Section 5 discussed the job control procedure (JPROC) call statements supplied by Unisys. In this section, we’ll discuss how to write your own JPROC definitions and how to call them. A JPROC definition is similar to an assembler procedure definition, which is explained in the Assembler Programming Guide, 7004 4532. However, the JPROC definition is a series of job control statements and procedure directives, as opposed to assembler instructions and directives. It consists of a PROC directive, one or more NAME directives, a series of job control statements, and an END directive. The PROC directive signals the beginning of the procedure, the NAME directive declares a label by which the JPROC can be called, and the END directive signals the end of the JPROC. Each time the series of job control statements is needed, a JPROC call is used. Job control then inserts the necessary job control statements at the point where the JPROC call was placed. The JPROC definition defines the coding and job control statements needed for a particular operation, and the JPROC call specifies the values for the variable parameters of the JPROC definition. Coding Rules The directives used in writing JPROC definitions take this form: LABEL AOPERATIONA OPERAND The label field extends from column 1 to column 8. At least one space must separate the label field from the operation field, and also the operation field from the operand field. Column 72 is used to indicate continuation, and columns 73 through 80 can contain identification or sequence information. Note: For compatibility with job control statements, you can precede the label field with two slashes (I I) in columns 1 and 2. In this case the label field extends from column 3 to column 10. The job control statements within a JPROC definition follow the same conventions as regular job control statements. These are listed in Appendix A. 70044623-000 8-1 How to Write and Call a Job Control Procedure Definition The characters that are allowable in directives and job control statements are as follows: Letters Special letters Digits Special characters A through Z ?$#@ 0 through 9 + * I, = ‘blank 0. - > <&! :; The terms you can use in the operand field of a directive may be symbols or character strings, which are explained in the following paragraphs. A symbol is a group of up to 240 alphanumeric characters used for parameter identification and as labels. The first character must be alphabetic. Special characters or blanks may not be contained within a symbol. The following are examples of valid symbols: V CARDAREA GS279 R$INTRN DAVE The $ of R$INTRN is allowable, because it’s a special letter, not a special character. For a symbol to be recognized by job control as a parameter identifier, it must be immediately preceded by an ampersand. (J / The following are not valid symbols: READ ONE SPEC’L 8AGN - - - embedded blank special character first character not alphabetic The operand field in a NAME directive may be obtained by referencing the symbol p(O), where p is the symbol used to reference any positional parameter in the definition. The zero indicates the parameter of an operand field. A character string can represent up to 252 valid characters, all of which must be printable. Character strings containing embedded blanks or commas must be enclosed in either quotation marks or parentheses. The enclosing quotation marks or parentheses are considered part of the character string. Embedded quotation marks are not allowed in the character string. A null character string is represented by two consecutive quotation marks. All parameter values are evaluated as character strings. C: 8-2 70044623-000 How to Write and Call a Job Control Procedure Definition Parameter Types Parameters are used to pass information from the JPROC call to the JPROC definition. These parameters can be equated to values, symbols, or character strings, and may be used to specify file identifiers, file names, volume serial numbers, etc. There are two types of parameters: positional and keyword. Positional parameters are identified by their position within the operand field of the JPROC call; keyword parameters are identified by the symbols assigned to them in the JPROC directive. The rules for specifying positional and keyword parameters with respect to position, order, omission, and format are covered in Appendix A. Both positional and keyword parameters may be sublisted. Thus, each operand of the JPROC call may represent one value or a series of values that may be referenced independently. When a parameter is sublisted, the subparameters must be separated by commas, and the entire list must be enclosed by parentheses. For sublisted positional parameters, an operand would appear as: (va(-1,vat-2,...,val-n) For sublisted keyword parameters, an operand would appear as: key=(vaL-1,vat-2,...,vaL-n) An omitted positional parameter in a JPROC call takes the value of a null character string. When a keyword parameter is given a value in the JPROC definition, it takes that value if the keyword parameter is omitted in the JPROC call. When no value is given to a keyword parameter in the JPROC definition, it takes the value of the null character string when omitted. Now, let’s explain the three JPROC directives. The Start of the JPROC Definition The PROC directive signals the start of a JPROC definition. It defines the number and type of parameters that may be specified in the JPROC call. The format of the PROC directive is: LABEL [[II]symbot) AOPERATIONt PROC OPERAND tpos,n][,k,. ..,k] The symbol is a dummy label of one to eight alphanumeric characters. It’s used as an entry point to the JPROC definition when it’s expanded and inserted into the control stream. If the JPROC call also has a symbol, it replaces the symbol of the PROC directive when the JPROC definition is called. If the JPROC call has no symbol, the dummy label is replaced by a null character string. The characters & 0’, + / may not be embedded in the symbol. . 70044623-000 - How to Write and Call a Job Control Procedure Definition The pos parameter represents the symbol by which any positional parameter in the body of the JPROC definition is referenced. If this parameter is omitted, no positional parameters can be used in the JPROC call. The n is a decimal number that represents the total number of positional parameters permitted in the JPROC call. If omitted, zero is assumed. If you omit the pos and n parameters in this directive (thereby indicating there are no positional parameters), you must still code two commas before you can code any keyword name values. The k parameter represents the name or names used in referencing keyword parameters and their default values (if any). To preset a keyword value, the k parameter takes the form: E,k-1=va(ue,. ..,k-n=vatue) In the following example, MOD1 is the symbol used as an entry point. One positional parameter is allowed, and it’s referenced by the symbol P in the JPROC definition. There are three keyword parameters allowed in the JPROC call; PRINTER, INPUT, and OUTPUT. If the PRINTER keyword parameter is omitted, it defaults to 20. MOD1 PROC P, 1,PRINTER=20, INPUT,OUTPUT or //MOD1 PROC P,1,PRINTER=20,INPUT,OUTPUT Naming the JPROC Definition The NAME directive supplies the name by which a JPROC definition is referenced. It must immediately follow the PROC directive. More than one NAME directive can be used, but all must be grouped at the beginning of the JPROC definition. Each such NAME directive specifies a different name for the same JPROC definition. Multiple NAME directives allow you to specify a different parameter in the operand field of each directive. Note: You may not give a JPROC any valid job control statement names (DVC, QGBL, etc.). When you call the particular NAME directive on the JPROC call, you can reference the parameter of the NAME directive with p(O), where p is the symbol used to reference positional parameters. This will be shown in an example, which should make this much clearer. The format of the NAME directive is: 84 LABEL tiOPERATION OPERAND [II)symbot NAME param 7004 4623-000 How to Write and Call a Job Control Procedure Definition The symbol specifies the name of the JPROC definition. This is the name that’s used on the JPROC call to obtain the JPROC definition. The param is a parameter or parameter sublist that may be selected at job execution time. Here’s an example of this procedure: MOD1 PROC P,1 DUMPJOB NAME Y DUMPSYS NAME X II GO LABEL&P(S) //LABELY OPTION JOBDUMP ii GO NEXT //LABELX OPTION SYSDUMP I/NEXT NOP or //MOD1 PROC P,1 //DUMPJOB NAME Y //DUMPSYS NAME X 1/ GO LABEL&P(Ø) //LABELY OPTION JOBDUMP II GO NEXT //LABELX OPTION SYSDUMP //NEXT NOP This JPROC definition has two names: DUMPJOB and DUMPSYS. Positional parameters are referenced by the symbol P, so the parameter of the NAME directive is referenced as P(O). Assume that DUMPSYS is the name used on the JPROC call. The parameter on this NAME directive is X. When the first GO job control statement is interpreted, it would mean go to the job control statement with a symbol of LABEL&P(O). This &P(O) references the parameter of the selected NAME directive. In this case, it’s X. So X is added to LABEL, giving the symbol LABELX. This job would have an OPTION SYSDUMP job control statement inserted at execution time. The procedure would then go to the next job control statement, the NOP. If DUMPJOB is the name used on the JPROC call, the parameter on the NAME directive would be Y. When the GO job control statement is interpreted, it would mean go to the job control statement with a symbol of LABELY (from the LABEL&P(O)). This job would have an OPTION JOBDUMP job control statement inserted at execution time; the GO job control statement means go to the job control statement with a symbol of NEXT. This is the NOP job control statement; the OPTION SYSDUMP job control statement is skipped. Ending the JPROC Definition The END directive indicates the end of the JPROC definition. Therefore, it’s the last item in a JPROC definition. Everything between the PROC and END directives is considered to be the body of the JPROC definition. The format of the END directive is: LABEL [//]symbot 7004 4623-000 AOPERATIONA END OPERAND unused 8-5 How to Write and Call a Job Control Procedure Definition and, added to the PROC and NAME directives defined in “Naming the JPROC Definition” earlier in this section, looks like the following example: MOD PROC P,1 DUMPJOB NAME Y DUMPSYS NAME X any job control statements needed END If you are submitting embedded data as part of a JPROC definition and the embedded data contains the characters END, a special situation arises because the run processor interprets the characters END as the END JPROC directive. To avoid this problem, you must use all GBL job control statement to replace the END characters in the embedded data. This is an example: II OPTION SUB II GBL X=END II EXEC program-name Is 1* Calling JPROC Definitions Once you’ve written and debugged a JPROC definition, use the file symbiont to store it in the job control stream library file ($Y$JCS) or an alternate library file, and then call it when you need it. Until that time, you can test it by placing the JPROC definition within a control stream and issuing a JPROC call containing the name you supplied on the NAME directive. (In this way, you can test a JPROC without having to actually file it.) The JPROC definition is stored temporarily, in the job’s $Y$RUN file. We’ll explain this in a little more detail in “How JPROC Definitions Are Stored” later in this section. To call the JPROC, you use a JPROC call in the control stream. When the run symbiont encounters the JPROC call, it searches the job’s $Y$RUN file, then searches the specified library file for the named JPROC definition, and then inserts the selected job control statements from the JPROC definition into the control stream at this point. 7004 4623-000 How to Write and Call a Job Control Procedure Definition The format of the JPROC call statement is: //[symbol] procname tpl,p2,...,pn,ki=vi,kj=vj,...,km=vm) The symbol is a dummy label and is optional. When used, the symbol is substituted for the symbol specified in the label field of the PROC directive. The procname specifies the name of the JPROC definition. This must be the same as that specified in the label field of a NAME directive in the JPROC definition being called. The p represents positional parameters, and the k=v represents keyword parameters and their values. Positional parameters specified in a JPROC call are associated with positional parameters specified in job control statements in the body of the JPROC definition. The PROC directive specifies the number of positional parameters allowed. All parameters specified in the JPROC call must be separated by commas. Positional parameters must precede any keyword parameters. When a positional parameter is omitted, the comma must be retained to indicate the omission, except in the case of omitted trailing positional parameters. When there are no positional parameters preceding keyword parameters, two commas must precede the keyword parameters to indicate the omission of the positional parameters. Keyword parameters are identified by name, not by position, so an omitted keyword parameter does not require a comma to indicate its omission. Keyword parameters may be specified in any order. No more than one JPROC call can be on a single line. How JPROC Definitions Are Stored The file symbiont stores JPROC definitions in $Y$JCS or an alternate SAT library file. (See “Building and Storing Job Control Streams and JPROCS” in Section 1.) The values to be used are not substituted for any preset values until the JPROC call is issued. Substitution then takes place, and the JPROC definition is then considered to be expanded. A JPROC definition may be called as often an necessary, or until it’s deleted from the library file. 7004 4623-000 8-7 How to Write and Call a Job Control Procedure Definition The reading, verifying, and expanding of the entire control stream is a function of the run symbiont. Ajob input directly from a reader device may include JPROC definitions in its control stream. The JPROC definition must appear in the control stream before any reference to it is made. Therefore, if a JPROC definition pertained to assigning devices to a job, it should be placed before any device assignment sets. Such JPROC definitions apply only to that particular job; they aren’t stored in $Y$JCS or an alternate library file, they’re stored temporarily in the job’s $Y$RUN file. They also cannot be embedded within data. Because the job’s $Y$RUN file is the first file searched for a JPROC definition, by placing a JPROC definition in the job control stream you have the ability to test the JPROC definition without storing it permanently. You can also use this facility to temporarily override a JPROC definition that’s already stored. Whenever a JPROC definition being called is found in the job’s $Y$RUN file, $Y$JCS or the alternate library file is not searched. A sample job using this facility would look like this: If JOB TESTPROC MOD PROC P,1 DUMPJOB NAME Y DUMPSYS NAME X any job control statements needed END II DUMPJOB I& II FIN In this example, the JPROC named as either DUMPJOB or DUMPSYS would be entered as a temporary JPROC definition, which is referenced later by the JPROC call of II DUMPJOB. Upon encountering the PROC directive, the run processor will file the statements up to the END directive into the job’s $Y$RUN file, which is scanned when the JPROC call is encountered. 70044623-000 (- How to Write and Call a Job Control Procedure Definition Specifying an Alternate Library File to Be Searched for JPROCS The ALTJCS job control statement tells the run processor which alternate library file is to be searched for JPROCS. An alternate library file is one other than $Y$JCS. II ALTJCS specifies an alternate library file to be searched for JPROCS only, not job control streams. An ALTJCS job control statement specification overrides an alternate library specification on the RUN/RV command that initiated processing of the job control stream. You can specify multiple ALTJCS control statements in a control stream; the last library file specified is searched for JPROCS until the next ALTJCS statement is processed. Note: The run processor searches only the specified alternate library for JPROCS. Specify ALTJCS ,,,FREE to revert to the prior order of search (alternate library and then $Y$JCS). The FREE option must also be specified before another ALTJCS statement can be specified. The format of ALTJCS is: /IEsymbot] ALTJCS [fite-Labet-id] [I I [RES [,rpw][ 1 RUN vot-ser-no] 1 1[ I I FREE 7[,LuNnnn] ONLY OFF L° The file-label-id is 1 to 44 alphanumeric characters long. It is optional if you’re not searching a new library, but changing the last parameter (FREE, ONLY, OFF, or ON) for an alternate library already defined in a previous ALTJCS statement. We’ll discuss these options later. If you don’t specify a file-label-id, don’t specify vol-ser-no or rpw. The vol-ser-no parameter specifies the volume serial number of the disk where the alternate library file resides. This parameter can also specify the volume serial number of a format-label diskette. RES, RUN, or the actual volume serial number of the disk or diskette may be specified. If no vol-ser-no is specified, the cataloged vol-ser-no is used; if it is not cataloged, RES is used. The rpw parameter specifies a read password associated with the alternate library file. It must be specified if the file is cataloged with a read password. It is ignored if no read password exists for the file or if the file is not cataloged. The ONLY, OFF, and ON parameters specify order-of-search options. ONLY specifies that only the identified alternate library file is to be searched. When OFF is specified, the alternate library file remains open to the run processor and can be searched again by the use of the ON or ONLY options. You specify this option if you no longer want an alternate library file searched for JPROCS. ON specifies that the identified alternate library file is to be searched first and then $Y$JCS. ON is the default option. FREE is equivalent to OFF, except that it also frees the alternate device (from the run processor). 70044623-000 8-9 How to Write and Call a Job Control Procedure Definition Using the LUN keyword parameter, you supply a logical unit number to indicate the device type and characteristics for the alternate library. LUN is never specified unless a volume serial number is also specified. It is especially useful where either a disk or format-label diskette can be the alternate library volume. The volume serial numbers for disk and format-label diskette are syntactically the same. As a result, the system cannot determine if a disk or format-label diskette is required unless the volume is already mounted, or unless you use LUN parameter. If you don’t specify a logical unit number and if the proper volume isn’t already mounted, mount messages suggesting a disk drive, for example, could be directed to the operator when a format-label diskette is actually required. The LUN parameter helps avoid such confusion. Notes: 1. LUN is used only to determine the device type and characteristics. It has no relationship to logical unit numbers used elsewhere in the job control stream. 2. Confusion with mount messages is also avoided if the DVC-LFD sequence for the file is cataloged. (See “File Cataloging” in Section 6.) By simply providing a filelabel-id in the ALTJCS statement, the correct volume serial number as well as device type is extracted from the catalog (according to the label specified). You can identify alternate libraries for control streams and JPROCS through the FILE system console command and the RUNíRV workstation or console command. Workstation commands are explained in the Interactive Services Operating Guide, UP-9972. System console commands are explained in the operations handbook for your system. Parameter Referencing The parameters ofjob control statements that require substitute values at execution time must begin with an indicator of &. For example, if, in the body of a JPROC definition, you have a DVC job control statement in which you wanted to vary the logical unit number, it could be coded as follows: II DVC &P(2) The P is an arbitrary symbol assigned by you in the PROC directive; the (2) indicates that the logical unit number to be inserted is coded as the second positional parameter on the JPROC call. The parentheses around the 2 are required. 8-10 70044623000 How to Write and Call a Job Control Procedure Definition In this example, II DVC &P(1,2) the (1,2) indicates that the logical unit number to be inserted is coded as the second subparameter under the sublist for the first positional parameter. For each character string following the single ampersand, a substitution is made. If the character string is invalid (not defined in the PROC directive), a null character string is inserted. Any job control statement may be continued between parameters, or between the operation and the first parameter. No job control statement can exceed column 71. This means that the total number of characters cannot exceed column 71, even after substitution. The maximum of 71 characters includes embedded spaces. Column 72 is used to indicate continuation. The length of a single parameter is 242 characters. For positional parameters, this is the value; for keyword parameters, it is the keyword and the value. If a parameter is sublisted, the maximum length is decreased by 2 for each element of the sublist. Note: The maximum length of a single operand ofa job control statement is 252 characters. Thus, ifyou have a parameter of 242 characters, there are only 10 characters left for other parameters. Here are some examples. Example 1 In this portion of a JPROC definition, we’ll see how a value is given to the DVC job control statement in the body of the JPROC definition. PROC POS,1 ACTI NAME II DVC &POS(1) END Let’s say that the JPROC call is this: II ACTI 10 the DVC job control statement that would be generated and inserted to the control stream would be as follows: II DVC 10 70044623-000 8-11 How to Write and Call a Job Control Procedure Definition Example 2 If part of the JPROC definition looked like this: PROC KEY 1=90 ACT2 .NAME II DVC &KEY1 END and the following JPROC call was issued: II ACT2 KEY1=20 this job control statement would be generated: II DVC 20 If the JPROC call was issued without the KEY1 parameter, the value of 90 set in the JPROC definition would be used. 8-12 70044623-000 How to Write and Call a Job Control Procedure Definition Example 3 This JPROC definition has one positional and one keyword parameter, and two NAME directives. 1. 2. 3. LAB PROC POS,1,KEY1=10 MASTER NAME 20 DETAIL NAME 30 4. 5. 6. //&LAB DVC &POS(0) DVC &POS(1) II DVC &KEY1 II END When this JPROC call is issued: I/Li MASTER 40,KEY1=50 these job control statements are generated: I/Li DVC 20 DVC 40 II DVC 50 1/ Line 4 in the JPROC definition means to take the value of the parameter in the NAME directive that matches the name on the JPROC call MASTER. So the first DVC job control statement has a logical unit number of 20. Line 5 means to take the value of the first positional parameter in the JPROC call; the second DVC job control statement has a logical unit number of 40. Line 6 means take the value of the KEY1 keyword parameter; the third DVC job control statement has a logical unit number of 50. LI is specified by the JPROC call as being the substitute value for the symbol in the PROC directive. Line 4 will use this value. So, the first DVC job control statement has a symbol of LI. - 70044623.000 8-13 How to Write and Call a Job Control Procedure Definition C Example 4 A parameter sublist may be referenced. This is done with a secondary level of indexing, which is shown in the following example: PROC POS,1,KEY=(10,20) EXAM NAME (30,40) 1. 2. 3. 4. ii II II /1 DVC&KEY(1) DVC &KEY(2) DVC &POS(0,1) DVC &POS(0,2) END When the following JPROC call is used II EXAM KEY=(50,60) these job control statements are generated: 1/ 1/ II II DVC DVC DVC DVC 50 60 30 40 Line 1 of the JPROC definition means use the first subparameter of the KEY keyword parameter. The JPROC call uses this keyword parameter, so its new values (50 and 60) override the values assigned in the JPROC definition (10 and 20). Line 2 means use the second subparameter of the KEY keyword parameter. Line 3 means use the first subparameter on the NAME directive (0,1), and line 4 means use the second subparameter on the NAME directive (0,2). 8-14 70044623-000 How to Write and Call a Job Control Procedure Definition Example 5 A reference to a parameter may occur anywhere in the body of a procedure definition. If the reference is the only field, and therefore naturally delimited, there is not much likelihood of confusion. If the possibility of confusion exists, the reference may be terminated with a period, which is a concatenation operation. The period is dropped during the expansion of the control stream. The following JPROC definition has two keyword parameters: KEY1 and LABEL; neither has default conditions. COM PROC KEY1,LABEL NAME If OPR&KEY1.IS&LABEL.1990 END If this JPROC call was used II COM KEY1=TODAY ,LABEL=-OCTOBER-6- this would be generated: II OPR TODAY-IS-OCTOBER-6-1990 70044623-000 8-15 n fl) Section 9 Using the Interactive Job Control Dialog The Function of the Job Control Dialog The job control dialog is an interactive facility of 0S13 that guides you through the process of building a job control stream or user JPROC from a workstation. To begin a job control dialog session, key in SC JC$BLD. This activates the dialog processor and opens the job control dialog file. Dialog text is displayed at the workstation screen and your responses to the dialog are entered at the workstation keyboard. The dialog processor passes your responses to the system program JC$BLD, which creates your control stream or JPROC and stores it in the system file $Y$JCS. The functions of the dialog processor, which manages a dialog session, are detailed in the appropriate operations guide. Note: Ifyou encounter system errors when keying in SC JC$BLD, key in RV JC$BLD and press XMIT. A short paragraph explaining RUN libraries is then displayed followed by the question DO YOU WANT TO SAVE RUN LIBRARIES? (Y OR N). Key in Y so that you’ll be able to enter the SC JC$BLD command without encountering any errors in the future. The job control dialog introduces the concept ofjob control and (if you’re building a control stream) presents job control statements in the form of menu items from which you choose the statements you want. If you need a dialog concept or particular statement explained, you can ask for help by keying in HELP or a choice that generates HELP screens. HELP screens explain the choice or statement parameters to you. When you make a valid choice, the dialog resumes at the point where it was interrupted. The HELP screen facility of the job control dialog can be used selectively (statement by statement) so that you receive detailed explanations only when you need them. More experienced users, then, can execute the dialog session quickly while still being constrained to build syntactically correct statements. Figure 9-1 presents an overview of the process of using the job control dialog to build a control stream or user JPROC. - 70044623-000 9-1 Using the Interactive Job Control Dialog STEP 1 Key in the SC JC$BLD command to initiate a job control dialog session. STEP 2 The dialog processor is acth,ated and the job control dialog file is opened in response to the command begin executing the dialog. JOB CONTROL DIALOG — DIALOG PROCESSOR STEP 3 The dialog processor routes your dialog responses to the system program JCSBLD. $ JOB CONTROL DIALOG DIALOG PROCESSOR JCSBLD STEP 4 JC$BLD uses your responses to the dialog to build a job control stream or user JPROC and stores it in SY$JCS. DIALOG RESPONSES f JC$BLD SYsJCS Figure 9-1. Using the Job Control Dialog to Build a Control Stream or User .JPROC 9-2 7004 4623-000 Using the Interactive Job Control Dialog Building a Control Stream with the Job Control Dialog Let’s begin a sample job control dialog session. First, you perform the system LOGON procedures described in the appropriate workstation user guide. Then, you key in SC JC$BLD and its associated parameters. The first dialog screen looks like this: DIALOG FOR JOB CONTROL PROGRAM= THIS DIALOG PREPARES A JOB CONTROL STREAM OR PROCEDURE CJPROC). FOR AN EXPLANATION OF THE DIALOG PROCESS, ENTER ‘HELP’ IN THE SPACE PROVIDED. HELP If you key in HELP, these screens are displayed: THE DIALOG FOR JOB CONTROL IS A METHOD OF CONSTRUCTING JOB CONTROL STREAMS AND PROCEDURES (JPROCS) USING COMPUTER ASSISTANCE. PROMPTING FOR DATA ENTRY OR SELECTING FROM AMONG AVAILABLE OPTIONS IS ALWAYS PROVIDED, AND YOU CAN ASK FOR MORE DETAILED EXPLANATIONS OF STATEMENTS, PARAMETERS, AND OPTIONS. AFTER A STATEMENT IS COMPLETED, THE IMAGE BUILT BY THE COMPUTER AS A RESULT OF YOUR CHOICES IS DISPLAYED ON THE WORKSTATION SCREEN. YOU MAY ACCEPT IT FOR OUTPUT, CORRECT IT, OR REJECT IT ALTOGETHER. Note: To proceed from one screen to the next, you usually press the transmit key. Whenever necessary, a note will appear at the bottom of the screen reminding you to do this. THE JOB CONTROL SETS ARE FORMED BY MAKING SELECTIONS FROM MENUS OF AVAILABLE OPTIONS, AND ENTERING SOME TYPES OF DATA DIRECTLY. THIS ALLOWS YOU AS MUCH FREEDOM IN YOUR JOB CONTROL AS OTHER MEDIA, BUT AT THE SAME TIME PROVIDES A STRUCTURE TO JOB CONTROL CREATION WHICH HELPS TO PREVENT MANY COMMON ERRORS. REMEMBER, HOWEVER, THAT THE DIALOG DOES NOT RECOGNIZE THE SAME JOB CONTROL ERRORS AS THE RUN PROCESSOR. DIALOG ERROR CHECKING IS LIMITED TO DIALOG OPERATION ERRORS, AND DATA TARGET MISMATCHES (SUCH AS TRYING TO PUT ALPHABETIC DATA IN A STRICTLY NUMBER FIELD). 70044623.000 9-3 Using the Interactive Job Control Dialog C The next screen asks what type of module you want to build: JOB CONTROL MODULE TYPES USE THIS MENU TO SELECT THE TYPE OF MODULE TO BE PREPARED: 1. JOB CONTROL STREAM 2. USER WRITTEN JOB CONTROL PROCEDURE (JPROC) 3. HELP SELECT ITEM BY ENTERING NUMBER. If you ask for HELP, these screens are displayed: IN ORDER TO EXECUTE ANY JOB, IT IS NECESSARY TO CONVEY TO THE COMPUTER EXACTLY WHAT YOU WANT TO DO, AND WHAT RESOURCES (PRINTER, READER, DISKS, ETC) ARE NEEDED. THIS IS ACCOMPLISHED THROUGH THE USE OF JOB CONTROL. THERE ARE TWO TYPES OF JOB CONTROL MODULES. THE COLLECTION OF JOB CONTROL STATEMENTS USED TO RUN A JOB IS CALLED A JOB CONTROL STREAM, SOMETIMES REFERRED TO AS THE JOB STREAM OR CONTROL STREAM. IN IT, THERE MAY BE JOB CONTROL STATEMENTS, CALLS TO SYSTEM SUPPLIED PROCEDURES, AND THE SECOND TYPE OF MODULE USER-WRITTEN PROCEDURES (JPROCS). - JOB CONTROL PROCEDURES HAVE TWO PARTS THE DEFINITION AND THE CALL. THE DEFINITION IS THE JPROC MODULE CREATED BY THE DIALOG. THE CALL IS A STATEMENT IN THE CONTROL - STREAM WHICH HAS THE JPROC NAME AS THE COMMAND, AND PROVIDES ANY NECESSARY PARAMETERS. THE JPROC CALL IS USED AS AN ABBREVIATION TO PREVENT CODING THE DEFINITION MANY TIMES. WHEN THE CONTROL STREAM IS PROCESSED, EACH CALL IS REPLACED BY THE APPROPRIATE DEFINITION WHICH HAS BEEN PUT AT THE BEGINNING OF THE STREAM OR STORED IN A SYSTEM FILE ($Y$JCS). THE RESULT IS THE SAME AS IF THE DEFINITION HAD BEEN CODED INSTEAD OF THE CALL. g.4 7004 4623-000 Using the Interactive Job Control Dialog Once again, you’re asked what type of module you want to build. JOB CONTROL MODULE TYPES USE THIS MENU TO SELECT THE TYPE OF MODULE TO BE PREPARED: 1. 2. 3. JOB CONTROL STREAM USER WRITTEN JOB CONTROL PROCEDURE (JPROC) HELP SELECT ITEM BY ENTERING NUMBER. You can ask that HELP screens explaining the choices be displayed again (by keying in 3), but let’s assume you want to build a control stream. The next screen displayed is the JOB control statement screen: STATEMENT: FORMAT: FUNCTION: JOB I/SYMBOL JOB JOBNAME,PRI ,MINSTORE,MAXSTORE,TASKS, TIME,OPTIONS,ACCT,BUFFERS,LOG,HDR THIS STATEMENT IDENTIFIES A JOB AND INDICATES THE BEGINNING OF CONTROL INFORMATION FOR THE JOB. THE SAME NAME IS GIVEN TO THE JOB’S RUN FILE ($Y$RUN). IF YOU WILL NEED HELP WITH THIS STATEMENT, ENTER HELP. What if you didn’t need HELP screens? The job control dialog screens vary according to the responses you make to the dialog. The initial screen is the same: DIALOG FOR JOB CONTROL THIS DIALOG PREPARES A JOB CONTROL STREAM OR PROCEDURE (JPROC). FOR AN EXPLANATION OF THE DIALOG PROCESS, ENTER HELP IN THE SPACE PROVIDED. 70044623-000 9-5 Using the Interactive Job Control Dialog Because you don’t need HELP screens to explain the dialog process, simply press the transmit key to display the next screen. The next screen displayed is: JOB CONTROL MODULE TYPES: USE THIS MENU TO SELECT THE TYPE OF MODULE TO BE PREPARED: 1. 2. JOB CONTROL STREAM USER WRITTEN JOB CONTROL PROCEDURE (JPROC) 3. HELP You key in 1, indicating that ajob stream is being prepared. The next screen displayed (since HELP screens weren’t requested) is the JOB control statement screen: STATEMENT: FORMAT: FUNCTION: JOB C,’ I/SYMBOL JOB JOBNAME ,PRI ,MI NSTORE,MAXSTORE ,TASKS, TIME,OPTIOWS,ACCT,BUFFERS, LOG, HDR THIS STATEMENT IDENTIFIES A JOB AND INDICATES THE BEGINNING OF CONTROL INFORMATION FOR THE JOB. THE SAME NAME IS GIVEN TO THE JOB’S RUN FILE ($Y$RUN). IF YOU WILL NEED HELP WITH THIS STATEMENT, ENTER HELP. As you can see, there is a big difference in the path the job control dialog takes, depending on your responses to the dialog. 9-6 7004 4623.000 Using the Interactive Job Control Dialog Let’s take the dialog one step further. If you key in HELP in response to the JOB statement screen, each parameter of the JOB statement is explained. If HELP is not requested, you are simply asked to key in the parametric values, without benefit of prompting screens. When the JOB statement is built, it is displayed and you have a final chance to change the parameters of the statement, with or without HELP screens, or accept the statement as it appears. When the JOB statement is accepted, the next screen presented is the job control statement master menu. JOB CONTROL STATEMENT MASTER MENU 1. 2. ALTER ALTJCS 3. CAT 4. CC CR DATA 11. EXEC 12. EXT 13. FREE 21. LFD 22. MTC 23. NOP 31. ROUTE 32. RST 33. RUN/RV 24. OPR 25. OPTION 26. PARAM 35. SET 36. SFT 5. 6. 7. DECAT 14. GBL 15. GO 16. IF 17. JNOTE 8. DST 18. JSET 9. DVC 19. LBL 20. LCB 10. EQU 27. PAUSE 28. QGBL 29. QUAL 30. REN 34. SCR 37. SKIP 38. SPL 39. UID 40. USE 41. VFB 42. VOL 43. 1$ 44. / 45. /& 46. SYSTEM JPROCS 47. GENERAL ENTRY 48. END OF SESSION 49. HELP ENTER SELECTION BY NUMBER IF YOU WILL NEED HELP WITH THIS STATEMENT, ENTER HELP_ — — — — — The rest of the job control dialog works in the same way as for the initial module-type choice and the JOB statement screens. Each statement you choose from the master menu is displayed and you are asked if you need help to build it. If you do, HELP screens are displayed that explain the parameters of each statement. Note: The DD job control statement is not provided on the job control statement master menu. To include this statement in yourjob control stream, make the GENERAL ENTRY menu selection (47), then enter the statement and its parameters in the space provided. The control stream you create is stored in $Y$JCS. A printed summary of the dialog session, organized by sequentially numbered paragraphs, is produced by the dialog processor. The default logical unit number of the printer file (printed summary) output is 20- any printer. You can accept this default or, during the dialog session, provide a specific printer’s logical unit number. Table A-3 of the Job Control Programming Reference Manual, UP-9984, lists the OS/3 logical unit numbers for printers. 7004 4623-000 9-7 Using the Interactive Job Control Dialog Building a User JPROC with the Job Control Dialog The dialog for creating a JPROC guides you through the process of defining your JPROC and building the job control statements and system JPROCS you want to include in the body of the JPROC definition. The procedure for initiating the dialog is the same as for building a job control stream: perform the system LOGON procedures and key in SC JC$BLD. When the job control dialog asks you whether you’re building a job control stream or user JPROC, key in the choice for user JPROC. The dialog then presents menus for: • Beginning the JPROC (PROC, NAME) • Choosing job control statements • Choosing system JPROCS • Ending the JPROC (END) As is the case when you’re building a job control stream, these menus generate other menus based on your responses to the dialog. You can request HELP screens at any point in the dialog where you need choices or parameters explained. After the HELP screens are displayed and you make a valid choice, the dialog returns to the point where it was interrupted. JC$BLD uses your dialog responses to create a JPROC. Note: Ifyou store a JPROC in your own (alternate) library file instead of $Y$JCS, you must include the ALTJCS job control statement in any subsequentjob control stream that calls the JPROC. ALTJCS identifies the JPROC and applies only to JPROCS. Entering Embedded Data To enter embedded data from a workstation, first choose the 1$ (start-of-data) statement from the job control statement master menu. Then, when the master menu is redisplayed, make the GENERAL ENTRY selection (47). Once this is done, you’ll be able to enter your embedded data. When all embedded data is entered and the master menu is presented again, choose the /* (end-of-data) job control statement. If you plan to enter dialog specification language (DSL) source code as embedded data from the workstation, a special situation arises because the characters that denote the start of a DSL comment are the same as the end-of-data job control statement (/*)• It’s necessary, then, to substitute another set of characters for the end-of-data job control statement. You do this through the OPTION job control statement. 9-8 7004 4623-000 Using the Interactive Job Control Dialog When the OPTION statement menu is displayed at the workstation screen, choose an OPTION EOD statement. The format is OPTION EOD=xx. The first character you select must be a slash (I). The second character can be anything but a slash (I), an asterisk (*), an ampersand (&), or a currency symbol Cs). Let’s say you choose /Z. Then, when the end-of-data statement is displayed as part of the job control dialog menu, you choose GENERAL ENTRY and key in your substitute characters; /Z in this case. The control stream you create, then, will include these job control statements: II OPTION EOD=/Z /S (start of data) (DSL source code) IZ (end of data) You key in your DSL source code when the dialog requests it. By substituting different characters for the end-of-data job control statement, you avoid any conflict with the DSL start-of-comment delimiter. Changing Dialog Responses Once you build a control stream or JPROC from a workstation, you may be able to use it for other jobs by making only a few changes to it or, you may discover that you need to correct it. Rather than building a new control stream or JPROC from scratch to incorporate the changes you want, you can use the audit version of the dialog processor to change or edit the responses you made in a previous job control dialog session. The audit version of the dialog processor outputs an audit file containing a complete record of your dialog responses and accepts as input an existing audit file of your responses to a previous dialog. An existing audit file used as input is considered an old audit file. The audit file produced as output of the current dialog session is considered a new audit file. You begin a dialog session, which uses the audit version of the dialog processor, by performing the system LOGON procedures and keying in RV JC$BLD. When you identify a new and/or old audit file (by volume serial number and file label) during the resulting dialog session, the system loads the audit version of the dialog processor. Note: Old and new audit file names cannot be the same when responding to JC$BLD queries. The audit version of the dialog processor (Figure 9-2) also outputs a printed summary of a dialog session that is used as a guide to changing dialog responses in a subsequent session. The summary is organized by sequentially numbered paragraphs. When you 70044623-000 9-9 Using the Interactive Job Control Dialog use the audit file as input to the dialog processor in a subsequent session, the job control dialog asks you to enter the numbers of the paragraphs you want to change. The summary lists these paragraph numbers. WORKSTATION OLD AUDIT FILE DIALOG PROCESSOR YOUR DIALOG RESPONSES JOB CONTROL DIALOG NEW AUDIT FILE SUMMARY A18871 Figure 9-2. Audit Version of the Dialog Processor Note: Audit files must be previously allocated MIRAM files. The audit version of the dialog processor allows you to present the job control dialog quickly and create a control stream or user JPROC by changing only the responses that need to be changed. Unchanged responses are automatically routed from the old audit file by the dialog processor to JC$BUILD without your intervention. During the same session, you enter your new responses to the job control dialog. You can also produce a new audit file (if you’ve specified it in the build command) that contains a mix of responses from the old audit file and responses entered during the current session. This audit file can then be used as input to the dialog processor in a subsequent session. “new” - Note: Only control streams and user JPROCS created using the job control dialog can be changed in a subsequent dialog session. Suppose you build a control stream for a job that runs nearly every day with only a few changes to the control stream. Perhaps you want disk and print output on some days, and disk output only on other days. You first build the control stream on Monday, specifying that a new audit file and a printed summary of the session be produced. You use the audit file as input to Tuesday’s dialog session and use the summary report as your guide to changing the appropriate dialog responses. 9-10 70044623.000 Using the Interactive Job Control Dialog Figure 9-3 traces the process of changing your dialog responses in a subsequent session. ON MONDAY. you create a job control stream and output a new audit tile (SESSION1) that contains your responses to the job control dialog. WORKSTATION Jo. DIALOG DIALOG PROCESSOR RESPONSES JCSBUILD —CONTROL—ø’ STREAM ‘Ir SESSION 1 (NEW AUDIT FILE) SUMMARY PARA 1 PARA 2 SESSION1 IS SPECIFIED AS THE OLD AUDIT FILE FOR TUESDAY’S SESSION ON SESSION I (OLD AUDIT FILE) f DIALOG PROCESSOR TUESDAY, you create a new control stream, using SESSION1 and the job control dialog as input to the dialog processor. You change only those responses that need to be changed, using Monday’s printed summary as a guide. Unchanged responses are automatically routed from SESSION1 (old audit file) to JCSBUILD. In addition, you create a new audit file (SESSION2) and a printed summary of Tuesday’s session, which can be used as input to a subsequent dialog session rewte taken from SESSION1; mae. in JOB .. JCS BUILD ransi to the job control dialog STREAM ‘Ir SESSION2 (NEW AUDIT FILE) SUMMARY PARA 1 PARA 2 Figure 9-3. Changing Your Dialog Responses The appropriate operations guide has more information about using the audit version of the dialog processor, including information about breaking off a session and continuing it at a later time without losing your changed dialog responses. - 7004 4623-000 9-11 0 0 Appendix A Statement Conventions Job Control Statement Format Ajob control statement has a maximum of five fields, which must appear in the following order: 1. Indication Field Distinguishes job control statements from data. It is required and begins with either II, /&, 1$, or 1*. 2. Label Field Contains a 1- to 8-alphanumeric-character symbol; the first character must be alphabetic. Unless this field is explained in a specified control statement, it is the target address of a SKIP, GO, or IF control statements or the ABNORM=label keyword parameter of the EXEC statement. This field is not separated from the indication field by a space; it immediately follows the II. 3. Operation Field Contains the name of the function to be performed. It is required for all job control statements having an indication field of II. At least one space must separate the operation field from the label field. 4. Operand Field Contains the specific information concerning the items upon which a job control function is to operate or the manner in which the function is to be performed. At least one space must separate the operand field from the operation field. 5. Comments Field Contains any descriptive information desired but not processed. The field must not contain a slash character. For those job control statements hi which an operand is not permitted, such as the FIN control statement, all information beyond the operation field is treated as the comments field. 70044623-000 A-i Statement Conventions Excluding the indication and label fields, consecutive fields must be separated by one or more spaces. A space may not appear in a field except within apostrophes (hexadecimal code 7D) or parentheses in an operand field. Example //MYTARGAD L J 1 I 1 2 LBL ‘MASTER CUST’ ILrJLrJL J 1 I I 636 4 NAME FILE 6 5 Notes: 1 Indication field 2 Label field 3 Operation field 4 Operand field: Note that spaces are allowable, because of the use of apostrophes. 5 Comments field 6 Field separation spaces How Job Control Statements Are Presented The conventions used to delineate job control statements are: • Positional parameters must be written in the order specified in the operand field and must be separated by commas. When a positional parameter is omitted, and subsequent positional parameters are being specified, the commas associated with positional parameters must be retained; otherwise, the specified parameters will not be processed as required. If no subsequent parameters are being specified, their associated commas should also be omitted. For example, the ALTER job control statement has four optional positional parameters. This is presented in text in the following format: II[syrnbot] ALTER [phase-naine]E,address][,change) [j IRESET Ll C A-2 7004 4623-000 Statement Conventions Then, the statement may be written: II /1 II II II II II ALTER ALTER ALTER ALTER ALTER ALTER ALTER phase-narne,address,change,RESET phase-narne,address,change phase-name,address phase-name phase-name,,change ,,,RESET phase-name,,,ORG Note that three commas are required in both the last and next-to-last examples. In the next-to-last example, the three commas are encountered before any parameters and are thus used to imply that the first, as well as the second and third parameters, were omitted. In the last example, a parameter is encountered before any commas, and thus the first comma is used to separate the first parameter from the omitted second and third parameters. II ALTER ,,,ORG If the last example used four commas, it would appear that ORG was the fifth parameter. And, because job control only associates four parameters with the ALTER job control statement, the ORG parameter specification would be invalid. • A keyword parameter consists of a word or a code immediately followed by an equal sign, which is, in turn, followed by a specification. Keyword parameters can be written in any order in the operand field. Commas are required only to separate parameters. The VFB job control statement has the following format: //[symbot] VFB LENGTH=1ines[DENSITY= f611[,FORMNAME=symboL) 11J L 1 [USE= [STAND1 OWNVF1 I IL L04NVF2-OWNVF9 [TYPE= I I SDMA 1 E,OVF=(1ine-1,...,tine-n)] 0770 0776 * t,OVF2=(line-1 line-n))(,CD1=(Une-1,...,Une-n),...] [,CD15=(tine-1,...,tine-n)j [,HP=n) However, for the purpose of explaining the use of keyword parameters, we’ll use only the first four parameters. Thus, we arrive at the following format: //[symbol] VFB LENGTH=l.Ine5rDENSITY= 1611[,F0RMNAME=symbol][,USE=STAND1) L 70044623-000 181] A-3 Statement Conventions C Then, this job control statement may be written as: II II II If II • VFB VFB VFB VFB VFB LENGTH=Lines,DENSITY=6,FORMNAME=symboL,USE=STAND1 USE=stand,FORMNAME=symbol,DENSITY=6,LENGTH=Lines DENSITY=6,LENGTH=Unes LENGTH=Unes FORMNAt4E=symbo,USE=STAND1 Ajob control statement may consist of a group of positional parameters followed by a keyword parameter (as the last parameter). For example: I/[symboL] EXEC program-name[ [Ubrary-name I L $Y$RUN [$t 1 [,E±]switch-priority][,ABNORM=Labe[] Since the last parameter is a keyword (not the last positional) parameter, this statement may be written as follows: II EXEC program-name,ABNORM=labet II EXEC program-name, I ibrary-name,ABNORM=Iabet Commas for the omitted positional parameters may be retained if desired. For example: II EXEC program-name,, ,ABNORM=(abel II EXEC program-name,t ibrary-name, ,ABNORM=Iabet The conventions for coding commas when a positional parameter is omitted and subsequent positional parameters are being specified still apply. When the second positional parameter is omitted, for example, the EXEC statement must be coded as follows: II EXEC program-name,,switch-priority,ABNORM=Iabel. • A positional or keyword parameter may contain a sublist of parameters called subparameters, which are separated by commas and enclosed in parentheses. The parentheses must be coded as part of the list. The subparameters within the parentheses may be positional, in which case the associated commas must be retained if a parameter is omitted, except for the case of trailing parameters, or they may be nonpositional. The description of the subparameters will indicate whether or not they are positional or nonpositional. For example: [,OVF=(Une-1,.,J.ine-n)][,OVF2=(tine-1,...,Iine-n)) A4 70044623-000 Statement Conventions Capital letters, commas, equal signs, and parentheses must be coded exactly as shown. CMcc X ‘aa’ NUMBCHAR=n (NOV) • Lowercase letters and words are generic terms representing information that must be supplied by the user. Such lowercase terms may contain hyphens and acronyms (for readability). For example: phase-name max-time destination filename • Information contained within braces represents mandatory entries of which one must be chosen, such as: BB,nn BM,nri FB ,nn FM,nn WM,nn RL RU • Information contained within brackets represents optional entries that (depending upon program requirements) are included or omitted. Braces within brackets signify that one of the specified entries must be chosen if that parameter is to be included. For example: Esched-priority] r I L 70044623-000 ALT OPT IGNORE A-5 Statement Conventions • An optional parameter having a list of optional entries may have a default specification that is supplied by the operating system when the parameter is not specified by the user. Although the default may be specified with no adverse effect, it is considered inefficient to do so. For easy reference, when a default specification occurs in the format delineation it is printed on a shaded background. If, by parameter omission, the operating system performs some complex processing other than parameter insertion, it is explained in the parameter description. r $Y$RUN L FYPE= L 1SDMA • An ellipsis (series of three periods) indicates the presence of a variable number of entries. • When a portion of a parameter is underlined, only that portion need be specified. For example: FORMNAME=symbol can be coded as: FO=symbot C A-6 70044623-000 Statement Conventions Coding Conventions All the job control statement information starts in position 1 and is not permitted to extend for more than 71 positions. Job control statements begin with either one or two slashes. In those with only one slash, no space is permitted between the slash and the next character. However, one space must appear between this character and the operand field. In job control statements beginning with two slashes, at least one space must appear between the last slash and the operation field (except when using the continuation statement (fin) or the label field). More than one job control statement of the type beginning with two slashes may be written on a card, but must not extend beyond position 71. At least one space must precede the slashes denoting the beginning of the second job control statement; this is referred to as multistatement coding. Numbers required for particular parameters can be expressed in decimal or hexadecimal. Numbers preceded by D’ are considered decimal. Numbers preceded by X are considered hexadecimal. (A trailing quote may optionally be specified.) All of the following represent the same value: X’FF X’FF’ D • 255 D’255’ Numbers not preceded by X’ or D’ are automatically considered decimal except in the following cases when they default to hexadecimal: • Main storage sizes specified on the JOB statement (mm and max parameters) • Memory sizes specified on the OPTION MIN and OPTION MAX job control statements • Absolute disk addresses specified on the EXT statement (addr or Tccc:hh parameters) • Address on the ALTER statement (address parameter) • Expansion limit on the SFT statement’s DLOAD option (expansion-limit parameter) Character strings on the ALTER, LCB, and SET job control statements must be specified as shown in their formats. 7004 4623.000 A-7 Statement Conventions Statement Continuation A continuation line is not considered to be a job control statement in itself It is a line that contains the continuation of a job control statement in a preceding line. A nonbiank character must appear in position 72 of the line containing the statement to be continued. Continuation maybe used with any job control statement that contains at least the first two fields. A continuation statement must begin with either the 3-character sequence lln, or just a simple II, which then must be separated by one or more blanks from the continued portion of the job control statement. The continued statement takes the form: f/En) param-1. .param-n . The n is a decimal number in the range of 1 through 9. The numbers do not need to be consecutive; however, each number must be greater than or equal to the preceding number used in the control stream. This is an optional field and may be left blank, or numbers can be used so you can keep a visual record of the amount of continuation statements used. For example, you could code the continuation as either Column 72 II parameters I/i parameters //2 parameters X X II parameters //i parameters I/i parameters X X II parameters /1 parameters // parameters X X < or or The param-1...param-n are the parameters required to continue the immediately preceding job control statement. Continuation can only occur at the blanks following the operation or operand fields, or after the comma following a parameter in the operand field. When you continue job control statements, the positions between the last used position and position 72 must be blank. Any information you intended as a comment for this line would be treated as data. 0 A-8 7004 4623-000 Statement Conventions An error message occurs if: • Column 72 contains a nonbiank character and the card is not a valid continuation • Comments extend past column 71 • A parameter list is not delimited by a comma An example of the continuation of a multistatement line of coding is as follows: If DVC 56 I/i CYL,1 1/ VOL ABC123,T12345,T57341 1/ LBL MASTER II LFD FILEX If EXT ST,C,3, X Software Conventions The following rules and conventions apply to the processing ofjob control statements and directives: • Data cannot be contained on ajob control statement. • Embedded data is normally assumed to be 80 characters long; when input from diskette, data can be 80 or 128 characters long. • Comments cannot contain a slash. • Job control does not scan past position 72; however, embedded data of up to 128 bytes is passed through. • The CR job control statement, and a JPROC call when used, must be the last statement on the card. • The following job control statements and JPROC directives cannot be part of a multistatement line: i/JOB II FIN II PROC If NAME I/END The II need not start in column 1, but must be first on the card. The II is optional for PROC, NAME, and END. • The following job control statements cannot be part of a multistatement line. They need not start in column 1, but must be first on the card. 1* /& /s 70044623-000 A-9 C Appendix B Operation Considerations System Libraries There are five primary system program libraries stored on the system resident device (SYSRES). The format of these libraries conforms to the standards established by the librarian. For a description of these standards, see the System Service Programs (SSP) Operating Guide, UP-8841. As in all disk files, an entry for each library file is maintained in the volume table of contents (VTOC) on SYSRES. These files may be accessed by your program without specifying a DVC-LFD sequence, provided the file name you use in your program is the same as the file identifier. For example: $Y$LOD. The five library files are: • System Load Library File This file contains the load modules that are generated as output from the linkage editor or the librarian. This includes system software load modules. This file is used as the default input file to the system loader. The file identifier for this file is $Y$LOD. • System Object Library File This file contains the object modules generated as output from the language translators. This includes system software object modules. This file is the default input file to the linkage editor. The file identifier for this file is $Y$OBJ. • System Macro Library File This file contains the standard system macro definitions, and is used as the default input file for these definitions by the assembler. The file identifier is $Y$MAC. • System Source Library File This file provides permanent storage for source modules consisting of source coding processed by the language translators. This file is used only when specifically referenced in the control stream. It’s never used as a default input or output file. 70044623-000 B-i Operation Considerations The file identifier is $Y$SRC. System Job Control Stream (JCS) Library File This file provides for the permanent storage of control streams and JPROCS. It’s used as the default output file by the file symbiont and as the default input file by the run symbiont. The file identifier is $Y$JCS. Volume Table of Contents For each file on a direct access volume, there exists a set of control blocks in the VTOC area of the volume. Each set indicates the attributes and extents of the file, and may contain up to two control blocks. The information contained in these blocks is used by data management to control access to files. In case of multivolume files, there is a set of control blocks for the file in the VTOC of each volume. For a complete description of these control blocks, see the Consolidated Data Management Macroinstructions Programming Guide, 7004 4607. B-2 70044623-000 Appendix C Job Control Statement Formats Job Control Statements II[syrnbot] ALTER Ephase-name)[,address]E,change) fRESET L //[symbot] ALTJCS Ef I Le- [abet-id) I L RES RUN vot-ser-no 10RG 1I [,rpw] I FREE ONLY OFF 1 [,LUN=nnn] //[symbot] CAT LfdnameE,catpw]E,SCR)E,GEN=nn] //[symbot] CC fcomand l’comand and parameters’ //[symbol] CR If DATA FILEID=fite-identifier[,RETAIN)[,IGNORE] If DATA STEPnnn 70044623-000 C-i Job Control Statement Formats f/Esymbol] DD[CFM= I I I FIXBLK 1[,BKSZ=n][,RCSZ=n][,SIZE=AUTO][,SIZEn=n] FIXUNB UNDEF VARBLK L fKLEN L 1 lKLE1 .1 ‘-°“ fKLOC IL ,ACCESS=. EXC EXCR SRDF SRDO SRD SADD UcP =][,INDS=n] J [REWIND= INORWD 1UNLOAD L I NORWD 1 [FILABL= RWD FREE ASSIGN JL— [,OPRW=NORWD]LCLRW= I L E,TPMARK=NO) ,RECV= ALL [VSEC= LOAD L NO NSTD STD TYES1 iVMNT= IONEIl RCB= JNO Vb0 1YES l 1J L ‘I L FCE OFF [,OFFSET=1] [RESTORE= L In ii IJCACHE= 1VES!] L [,KEYREF=n] 1N0 ii EMSGSUPP= 1YESTJ DM36 L I/[symbol] DECAT (fdnameE,catpw]E,SCR][ fGEN 1R0L L //[symbol] DST dest-1[,dest-2,...,dest-16] IlEsymbol) DVC , RES RUN J addr ALT IGNORE OPT 0 REQ[(n)] REAL C C-2 70044623-000 Job Control Statement Formats //[symbot] DVC PROGE,job-namell,HOST=host-id) //[s’rnbot] EQU tun-1,type-1E,lun-2,type-2,...,lun-n,type-n] //Esymbot] EXEC program-namer [ubrary-name 1[,[+]switch-priority][,ABNORMtabet] I $Y$RUN L Isys EXT (For disk and format-label diskette) //[symboL) EXT fMI1 1STI t L JL fmj L 11j [C jCF 1 inc 1 , addr c:hh [ml L l(bi,ai) TBLK CYL TRK OLD ,.i[,OLD][,FIX][,NTERM] l(bi,ai)i J EXT (For data-set-label diskette) //[symbot] EXT MI,C,ø,BLK,(bi,ai)E,NDI] //[symboL] FIN //[symbot] FREE Lfdname-1 EE(DEV)],. ..,Lfdname-n[(DEV)]] //[symboU GBL set-id-1E=init-1],set-id-2[=init-2),...,set-id-n[=init-n]] //[symbot] GO destination //[symboL) IF (a op b) destination Ii [symbol.) INQ JOB, keyword II [symbol] INQ SYS, keyword //[symbot] JNOTE coment-(ine[,destination-1,...,destination-n] 7004 4623-000 C-3 Job Control Statement Formats /Itsythol.) JOB Jobname[ {P} E 1 iminH;max[ [ 1 {tasks} {rnax.time}1 E,pririt-option- List] E,acc-no]E,nXm] , ACT LOG NOACT NOLOG NONE BOTH fNOHDR L. IlEsymbot] ISET value //[sythot] LBL ffite-identifier 1 l’fiLe-identifier’J [ ffite-serial-numberll[,expiration-date] JJ L 1VCHECK [,creation-date] [ [ //[symbot] LBL IJ L [ 1 {fiteseuence. number} [ {9enerationnL11ber 1 {version.num ber} [quaL/]tevel-id-1 [Level-id-2...[iLevet-id-n] [{nn} ] 1 [rPw/wPw ‘[quat/]1eveL-id-11eveL-id-2...t,level-id-n] [{nn} ] 1 t(rPw/wPw))1 ffiLe-s [ 1 ,expiration-d eriat-n ate]E,creatio n-date] umber l’CHECK JJ 1 {fi1e.seuenc enumber} [ 1 {9eneration.n umber} [ 1 {versionnum ber} 7004 4623-000 Job Control Statement Formats LCB (For Non-SDMA printers) fX’hex-string-l’ 1 C’char-string-1’f I/[symbot] LCB L fX’hex-string-2’ 1 c’char-string-2’f ,..., fX’hex-string-n 1C’char-string-n’ [ CARTNAME=symbo I. I , NAME= 48-BUS 48-Sd 63- STD OWNLC1 OWNLC2 [X’aa’ •IC’c’ IJCARTID L E,NUMBCHAR=n] LTYPE= 0770 0776 * IJSPACE= I Xaa’ C’c’ L LMISM= IIGN0RE L [DUAL= 1REPORT X ‘C’abababab C’bbbb’ L IJMISMCHAR= fx’aa’ L LCB (For SDMA and AP9215-1 Printers) //[symboll LCB [CARTNAME=symbotl IJNAME= 48-BUS 48-Sd 63-STD L [,TYPE=SDMA] LMISM= rIGN0RE ‘[REPORT L 7004 4623-000 C-5 Job Control Statement Formats //[syffbot] LFD ffiLename l*f11en11 F;- 181] fllF L 1 L //[syTrbot) MTC Lfdname, C EXTEND PREP ID IGNORE BB,nn BM,nn FB,nn FM,nn WM,nn RL RU //[syrr&L) NOP [QUERY) //[syirboL) OPR coment-Une[,destination-1,...,destination-n) I/[syithoL] OPTION p-1[,...,p-n) I/[symbol.) PARAM operand-1[,...,operand-n) //[syrrbol) PAUSE coniiient-tine[,destination-i ,...,destination-n) //[syrrbol] QGBL set-id-1[=init-1][,set-id-2[=init-2],...,set-id-n[=init-n)) //[symbot] QUAL [quatname) II[syrrbo[) REN tfdname, mew-label 1 [,NTERM] mnew-tabel’f 1 //[symboL] ROUTE destination-i destination-8 1f[syrr&t) RST fitename,checkpoint-id,step-number[,jobname[(rename)))[,pri] [,key-1=val-i,...,key-n=val-n] Jf[syr*ot) RUNrrjobnne[(new.name)] Llem jobname[(new-name)] RV :att-fi tename :(att-fitename, fRES ) RUN lvsn rIREs 1 LJ I L C-6 ERE HIGH NOR LOW lrftime 11[,key-i=vat-1,...,key-n=vat-n) HL ltime+nI 7004 4623-000 Job Control Statement Formats //[symbol] SCR tfdname[ fDATE[,yyddd] 1PREE,aaaa] L //[symboL] SET COMREG,char-string //[sythol] SET DATE,yy/m/dd[,t-date)[,d-date] //[symbol] SET UPSI,switch-setting //[symbol] SFT 1 modute-1[i...imodule-n)][DLOAD=[caLls].[{exPansion-Umit}) DLOAD=[([catls]I [ exPansiontimit}l)1 //Esyrnbot] SKIP target-label ,mask[j L ALL ANY NONE II [symbol] SET LDA,n,m, fstririg ‘strng //[symbol] SPL HOLD TAPE DISKETTE EJ LlH 1 [,nXm] [ {nocoP}1 [,ISTL)[,brk-pge] 1 1NOKDR //[symbol]UID [ {maxrecf] E ,forms] roskPcode}1 ,NOUPD f] [user-id-i 1(addr-1) luser-id-i(addr-i) user-id-255 L (addr-255) user-id-255(addr-255) //[symbot]USE DP,diatog-name[,printer-tfd][,new-audit-Lfcf][,old-audit-lfd] [ {} I //[symboL] USE LIB,module-name ,TYPE= L 10044623-000 C-7 Job Control Statement Formats [j //[symbol] USE MENU fmenu-fiLe-LFD/YSfMT 1 [,initia[-menu][ /menu-1eLF L finn L ] menu-format . 1 m enu-format-1 .. -1=aUas-1[ 2=aUas-12j /f[syTTbol]USE SFS[ [[format-fite-LFD-1/[format-fiLe-LFD-2] format-fite-LFD I L [uinitial-screen][ {nnn} 1 [,screen-format-1=atias-1[,...,screen-format-12=atias-12] II [symbol] VFB LENGTH=lines [,FORMNAME=symbo(] [USE L STAND1 OWNVF1 OWNVF2-OWNVF9 rDENSITY= L r ,TYPE= (SDMA printers only) 1611 181] 6770 0776 C [,OVF=(line-1,....,tine-n)] L [,OVF2=(tine-1,..,tine-n)][,CD1=(line-1,...,tine-n),...] [,CD15=(Line-1,...,line-n)] [,HP=n] //[sythot]VOL Mcc N NMcc r L J NS (NOV) (PREP) I 1 L I ] CS) (NS) (NOV) (PREP) 1 L I L SCRATCH 1 VOLSfl-3 volsn.2r SCRATCH S) (NS) (NOV) (PREP) (NOV) (PREP) I ] L NS) (NOV) (PREP) SCRATCH Is 1* C C-8 7004 4623-000 Job Control Statement Formats Job Control Procedures //[symbot] procname [pl,p2,...,pn,k1vi,kj=vj,. .,km=vm) //Lfdname ACCESS DVCnn,VOL lbtname {(LbLname[ votsn RUN * {fl}1[ {EXTEND}1) VOL= votsri RUN * //Lfdname ALLOC Ibiname {(tblname[ {}1E {EXTEND}1 I ,EXT= (L{sT}1 {CF}1[ {inc}1 [ {VolsflJ Tccc:hb TBLI( [ {i.ai)}1 TRK OLD — 7004 4623-000 L fmj 1 ,..1L,OLD][,FIX][,NDI]) l(bj,aj)f ] c-g Job Control Statement Formats C /JEsymbot] ASM 1 [JPRNTR= [lurit,dest] 1IJIN= ASML N[,dest] I II ASMLGJ I 2et,destj L. —H L ,OtJT= (vot-ser-no,tabet) CRES) (RES,Label) (RUN,tabel) C*,tabet) (vot-ser-no,label) (RES, Label) (RUN,1 abet) (* Label) (N) RUNY$R]UNY vot-ser-no-1,tabet-1 RES,labet-1 RUN,tabet-1 *,Label.1 N ,LIN=( , vol-ser-no-2,tabel-2 RES,Iabet-2 RUN,tabeL-2 *,label..2 N ) vot-ser-no-2,Label-2 RES,labeL-2 RUN,Labet-2 *,label..2 N ) RES,$$MAc ,COPY=( vot-ser-no-1,Label-1 RES,Labet-1 RUN,label-1 *,tabet N ii [SCR1= JLST= loption L loPtli...oPtnh]L [SCR2= fvot-ser-noll ,ALTLOD= J I IL. , fvol-ser-no 1RE.s (vot-ser-no,Labet) (RES,Labe() (RUN,Labet) (* Label) (RES,$YSLQD) (R*,$Y:$RUN) [SYSM64= IYES L C-b 1NQ 70044623-010 Job Control Statement Formats I/[symboL) AUTO AUTRPG AUTRPGL AUTRPGLG [RNTR= 1 [Lun[,dest] [ IN= N[,dest) 2ØE desti ‘— J H L ,OUT= (vot-ser-no,(abel) (RES) (RES,(abet) (RUN,tabet) (*LaL) (vol-ser-no,labet) CRESS (abet) (RUN, Label) (*, label) (N) (ji.N,$y$RtjN) rOUTSRC= f(vol-ser-no,Label,Lfd-name,moduLe-name)1 ,LST= ci[ L LSCR1= L Ivol-ser-noll [SCR2= 1R ,ALTLOD= 1] L {}1 K Ivol-ser-no l1m (vol-ser-no,labet) CRESS label) (RUN, Label) (*, label) (RE,:$Y$LOp [EMB= fNO llrMoD= [3 1ESfJ L [copY n= I 1E,5K1PC) L J (vol-ser-no,(abeL,[fd-name) (RES,label,lfd-name) L E,ERRFIL=(vol-ser-no, label ,module-name)] 70044623-000 C-li Job Control Statement Formats f/syi±ol {CCOMP CCOMPL CCOMPLG}IN=(tabet,vot-ser-no) [PRNTR=((NILunIZØ})) [,LIB1=(tabet,vot-ser-no)] [,LIB2=(tabeL,vot-ser-no)) [,LIBC=(Labet ,vot-ser-no)] (,OUT=({Labet,vo(-ser-nolN))] (,DEBUGC$1140)YIYES)] E,DEFINE=(define_symbo(E=initiaL_vatue){, [,INTERACT={NINO}] [,DUMP=CNINO}] [,LIsT=CNINOIYIYEs)] ... E,SOURCE=CNINOIYIYES)] [,NRENT=CNINQIYIYES)] ,ALTLOD=(tabet,vot-ser-no)] t,MAINCNINQIYIYES}) [,PP={NIJIc:IYIYES}J f/Esymbot) COBL74 COBL74L [RNTR= COBL74LG L rIN= I L (vot-ser-no,tabet) (RES) (RES,Labet) (RUN,t abet) (* (abet) [LIN=( (vot-ser-no,tabel) ) (RES,Labet) (RUN,tabet) ç*,Label ) (RESI$Y$SRC) I L ,OBJ= tun[,dest] N[,dest) JJLINn=( vot-ser-no,tabet ) RES,Labet RUN,Labe( I I L (vo(-ser-no,tabet) i[SCR1= fvot-ser-noii (RES,Labet) L. (RUN,labe() (RUN ,SY$RUN) II .1 (*, (abet) [JSCR2= [vot-ser-noll [SCR3= [vot-ser-no L ‘ ,ALTLOD= ]L 1JN (vot-ser-no,tabet) (RES, (abet) (RUN, label) (*, label) t,option=specification] (RES $Y$L,OD) (RUN,$Y$RUN) [,ERRFIL=(vol-ser-no,tabet ,module-name)] C’ - C-12 70044623-000 Job Control Statement Formats /IEsymboL] [ COBL85 COBL85L COBL85LG I ,IN= 1 J Lun[,vot-ser-no] N (voL-ser-no,label) (RES) (RES, label) (RUN, Label) (* Label) ,LINn= ,LIN= ,ALTLOD= 1 ,SCR2=f vot-ser-no I L_ COBOL COBOL I COBOLLG [OBJ= I I I L I (voL -ser-no,tabet) (RES,Labet) (RUN,tabet) (*,Labet) I ,SCR3=f vol-ser-no J RES [RNTR= COBOLBLG (vol-ser-no,L abet) (RES. label) (RUN, Label) (*, label) .OBJ={ (vol-ser-no,tabet) (RES, labeL) (RUN, [abet) (*1 LabeL) (RES,$Y$LOD) (RES,$Y$RUN) COBOLB COBOLBL I (RE.$Y$SR (vol-ser-no,Labet) (RES,tabet) (RUN,tabeL) (*,[abe[) ,SCR1=f vot-ser-no 1RES /I[syrrt.ol] PRNTR= E,optton=specification) LunE,destJll [1N= N[,dest) (vol -ser-no, Label) (RES) (RES, Label) (RUN, labeL) Label) 20[,dest] (vo[-ser-no,[abel) (RES,Labet) (RUN,Labet) (*[) 1[LIN= C.RUN:g.S?$RUN.. ]L II (voL-ser-no,tabet) (RES,tabet) (RUN,[abet) (*[[) [,OUT=(p-1[,...,p-n)][,LST=(p-1,..,p-n)] rSCR1= fvoL-ser-no1 jSCR2= JvoL-ser-no L 1RES JL IJSCR3= Ivol-ser-noll I 1RUN I I — lRs ,ALTLOD= (volser-no,labe[) (RES,Labe[) (RUN,labeL) (*, [abet) CRESS $YSQD (RUN,$Y*RU 704 4623-000 C-13 Job Control Statement Formats /l[syutoL] DVCDKT vol -ser-no[, [un] [NOVOL= {Y}J //[syr±oL] DVCVOL [vot-ser-nol [,[un][NOVOL= fy RES RUN l. I J L /I[syrriiot] DVCVTP voL -ser-no[,[un] [PREP= {Y} 1 [NOVOL= [Y} 1 //[symbo[] FORT FORTL FORTLG FOR FORL FORLG FOR4 FOR4L FOR4LG [RNTR= I IL_ [Iun[,dest] N[,dest] 2ø[,cIest1 1[1N= — L ,OUT= (vot-ser-no,Label) (RES) (RES,LabeL) (RUN,Label) (* Label) (voL-ser-no,tabet) (RES,LabeL) (RUN, label) (*, Label) NO (RUN,$Y$RuN) Lscgi= IL. Ivol-ser-noll IJALTLOD= I I —I I (vol-ser-no,Iabe[) (RES Label) (RUN,(abel) (*,[abel) L RuN,$Y$RUN [,OPT(D,N,X)][,NDEI][,STX=opt ions] [,CNL=k][LIN= L ff iLename1 lL1.bi IJLST= fk ‘J L optton M [ L A 1 )][SIZE= AP=(S .[L} 1 [,ERRFIL(vol-ser-no,labe[,module-name)] C C-14 70044623-000 Job Control Statement Formats //[symbot] [FOR4 N= 1 71j FRNTR= ILunE,dest) N[,dest) I I FOR4L IFOR4L.G1 (votser-no,tabet) (RES) (RES,Labet) (RIJN,Labet) (* Label) j IZØ[,destl H —U L ,OUT= (vot-ser-no,tabeL) (RES,Labet) (RUN,Labet) [SCR1= fvot-ser-no IL. [abet) N RuN;$Y$RN ,ALTLOD= (vot-ser-no,Labet) 7[,OPT=(S,N,X))[,LIN=fitename] (RES, (abet) (RUN, (abet) (*,tabet) (RL:,$Y$RU.N tLST=oPtion)EiMAP(SiAiL)][S1ZE= {L} 1 E,ERRFIL(vot -ser-no, (abet ,modute-name)i I/Esyrrioti [FOR?7 [RNTR= IFOR77L IFOR77LG N (1 I L (Un 7IJIN= [,vot-ser-no)}) N ‘ ‘ rouT= I L II II (vot-ser-no,(abe() (RES,tabet) JL (vot-ser-no,tabet) (RES,tabe() (RUN, (abet) (* label) RUN,$Y$RUN rSCR1=c vot-ser-no j1JSCR2=f voL-ser-no [RE$ 1RES L flL FSCR3=r vot-ser-no L lRS j1IJSCR4=f L FALTLOD= (vot-ser-no,tabet) I I (RES,Labet) (RUN,tabe() vot-ser-no jRES 7 [,LIN=fitename] L [LIN=f (vo(-ser-no,labe() (RES,(abet) I (RUN,tabet) I L 70044623000 I j] H EMIN= ,MAX= 1, [UtiP=f Y N I 1 C45 Job Control Statement Formats 1 lLdJ //[sythot) [LINK Einput-modute-name-1,...,input-mo&ite-name-1ø] FPRNTR= [[un[,dest] INL,dest] I L ,IN= 1øe (vot-ser-no,tabe[) (RES) ,OUT= (RES, (abet) (RES, (abet) (RUN, [abet) (*, (abet) (RU N,$X$RU.N) rRLIB= I I L [ALIB I I L [ALT [CLIB= L (vo[-ser-no,Labet) (RUN, labe[) (*,[abel) (N) (RUN.;$i$RUN): (vol-ser-no,label) (RES,labet) (RUN,Label) (*,tabe() (vot-ser-no,labet) (RES,tabet) (RUN,[abel) (*,(abel) lrscRl= fvot -ser-no1 ‘1 L [STD= IYES V0 [,OPT=’optons] 1 (vol-ser-no, label )} (RES, Label) (RUN, Label) (*, label) (RUN ,$Y$RUN) (vol-ser-no,label,modnarne) (RES, Label ,modname) (RUN, label ,modname) (*, label,modname) C; 1E,CMT=’coment’] [,ENTER=express ion] C C-16 7004 4623-000 Job Control Statement Formats II [symboL] PASCAL [PRNTR=N] ,IN= (vsn,tabet) (RES) (RES,tabet) (RUN,tabet) (vsn,tabet) IjLIN I (RUN,tabet) 1 [ALTLOD={ (vsn, [abet) (RES, [abet) (RUN,[ abet) (RES,SYSLOD) roBJ= I I (RES,tabet) (RUN,tabet) L (RUN,$Y$RUN) (REIYSRUN) LOBJLST[ YES ][,MEM=vatueK]LDUMPf YES 1NOJ iN. L //[symbot] RPG RPGL RPGLG E L [RNTR= [tun[,dest] N[,dest] [20[,des.t] 1[IN= L [OUT= (vot-ser-no,[abel) (RES,[ abet) (RUN,tabet) (*, [abet) (N) (vol-ser-no,t abet) (RES) (RES, [abet) (RUN, [abet) (*, [abet) ,LST= {K}J (RUN,$Y$RUN) JSCR1= fvot-ser-no 1 IJSCR2= Ivot-ser-no L [ALT 1]L iR iR (vot-ser-no,t abet) (RES, [abet) (RUN, [abet) (*, [abet) C RUN , $.Y RUN ) [,CONSOLE=tfd-narne] [EMB= ,MOD= {3 I RAM } [,COL=7] [,ERRFIL=(voL-ser-no,tabet,modute-name)] [,MI RAM=ALL) [JUNPKDS=IYES11 L 7004 4623-000 i1_] [FNANE8= [YES L 1N.Ô C-17 Job Control Statement Formats C) If Esy±ot) SPOOL [EDIRECT= I DISK 11[,BUF=nXm)EJCOPIES= fn TAPE DISKETTEJJ LSKIPCODE [nil l!1J H L L I n ii [,FORMNAME=forms] [RECORDS L [HDR= [NO ll[JTESTPAGE L .vcj L [No il[,PAGEBRKn] lEs1J 11 LCOMPRESS= [No ii ERETAIN= 1s1JL l’1JL LUPDATE= [NO [YES L iNc [HOLD= L IYES11 [JSECURE [YES i1JL I/ignored UDD IN=( vol-ser-no RES RUN 1No ,tabet[ [noextil) 118 1 L [noextlllj 1T [EXTEND11) 1] L f] ,OUT= C vot-ser-nol ,tabe1[ L .1 [PRNTR= I L LPUNCII= L lun[,dest] N[,dest] de.st I 1 20. [YES11 IJCOMPARE= lf] L ,EXT=([MI] I IL. Jmi L C-18 18 [ c j CF FJ —a--- I II [YES inc 0 I j , —i il,rrmj. i Ll(tuiai)f a11j 1 l(b1 addr Tccc:hh BLK TBLK CYL TRK OLD ,...i[,OLD][,FIX]) ] 70044623-000 Job Control Statement Formats I/ignored UDT IN=( vot-ser-no ,tabetIj Inoextll) l RES RUN I ,OUT=(vot-ser-no,LabeU [PRNTR= fun[,dest] N[,dest] I LZcit:I L LPUNCH= L IN ii 1YESI] [COMPARE= L 1YES I/ignored UTD IN=(vol-ser-no,(abet), i7[J FEXTEND17) 1 J L OUT= (Ivot-ser-nol 1 LabetIj 7 IJPRNTR= [tun[,dest] 181...] L [PUNCH= INO JL L ii [COMPARE 1YESI] 1 1[ [No L [1ncJ [EXT=w4IJi ICF} fmi L //[Lfdname] IWORKn1 JL fmj 1 l(bi,ai)1 ,..7E,OLD]E,FIX]) ] DVC=nn,VOL= [RES RUN 1TEMPnI Ivot -ser-no VOL= BLK= {4000 70044623-000 • l(bi,ai)i Tccc:hhJ RES RUN vot-ser-no J [EXTSP= {nn} [SECALL= {nn} [TYPE= {f lie tYPe}1 C-19 Job Control Statement Formats //[symboL] IWRTBIG1 ‘btock-11,’bLock-2’,...,’btock-8’] 1LWRTSMLI (vot-ser-no,t abet) (RES,[abet) (RUN,Labet) I I I (*,tabet) cRL$oD. L [LUN= { ({nnn} {tfd.name}1[Idest]) C’ C-20 7004 4623-000 Index A B ABNORM parameter, EXEC statement, 4-50, 6-68 Abnormal termination, 2-10, 4-50, 6-68 ABROUMP option, 6-27 Absolute address, 2-5 ACCESS JPROC call, 5-8 Access method, specifying, 4-26 Account numbers, 4-7 Account records, suppressing printing, 6-34 ACN=account-number option, 6-26 ALIB parameter, LINK JPROC call, 5-28 ALLOC JPROC call, 5-10 Allocation, file, 4-30, 4-31, 4-33, 5-10 ALTER job control statement description, 6-56 Alternate devices, 4-14 Alternate library files for job control streams, 1-10 for JPROCS, 1-10 for saved, translated control streams, 1-10, 6-36 searching for JPROCS, 8-9 storing control streams in, 1-10 storing saved, translated control streams in, 1-11, 6-36 ALTJCS job control statement, 8-9 ALTLOD parameter, LINK JPROC call, 5-30 Audit version, dialog processor, 9-9 Automatic inclusion, 5-25 Backspacing, 6-20 BAL, 2-7 Basic assembler language (BAL), 2-7 Binary overflow interrupt, 6-27 BLK parameter, changing extent specifications, 5-6 Block characters, printing, 5-33 Block numbering, tape volumes, 4-21 Blocks allocation amounts, 4-31 changing extents, temporary work files, 5-6 file allocation, 2-7 BOF option, 6-27 Branching conditional, 7-2 directing program control, 2-11 providing targets, 7-4 unconditional, 7-1 Buffers load code (See Load code) spool, 4-7 vertical format (See Vertical format buffers) BUF=nXm option, 6-27 Building job control streams description, 1-9 using the job control dialog, 9-1 7004 4623-000 Index-i Index C CACHE parameter, DD statement, 6-59 Card data, input spooling, 6-7 Card input, adding, 3-10 Card reader device assignment set, 3-10 ending operation, 3-8 start of data and end of data, 3-12 Cards, adding, 6-61 CARTID parameter, LCB statement, 6-14 CARTNAME parameter, LCB statement, 6-13 Cartridge (See Print cartridge) CAT job control statement, 6-26 Catalog, file (See File cataloging) CC job control statement calling saved translated control streams, 6-49 description, 6-45 CD1 through CD15 parameters, VFB statement, 6-17 Changing dialog responses, 9-9 Character strings LCB statement, 6-11 phase header record comment field, load modules, 5-30 Characters, block, 5-33 Checkpoints INIT parameter, 4-45 restart facility, 2-11 RST statement, 6-44 CUB parameter, linkage editor JPROC call, 5-30 CMT parameter, linkage editor JPROC call, 5-30 COBOL, naming your files, 2-7 Coding conventions, A-7 Commands, issuing (CC statement), 6-45 Comments field, A-i Communications region, SET statement (SET COMREG), 6-40 Conditional branching, 7-2 Continuation lines, A-8 Control fields, modifying, 6-39 Control streams (See Job control streams) CR job control statement, 6-61 Creation date, file, 4-37 Cylinders, file allocation, 2-5, 4-30 Index-2 D Data compressing, 6-3 definition, 6-58 embedded (See Embedded data) start of data and end of data, 3-12 DATA job control statement, 6-7 Data management assigning a file name, 3-5 modules not in $Y$LOD or $Y$RUN, 6-53 Data-set label diskette (See Diskette files) DATA STEP job control statement, 6-70 Date block characters, 5-35 changing, 6-39 file expiration and creation, 4-37 DATE parameter, SCR statement, 6-25 DD job control statement description and format, 6-58 keyword parameters, (table) 6-1, 6-59 DDP program-to-program facility, DVC PROG statement, 4-17 DECAT job control statement, 6-26 Decimal overflow interrupt, 6-27 DENSITY parameter, VFB statement, 6-17 Destination, specifying DST statement, 6-3 JNOTE statement, 6-52 OPR statement, 6-50 OPTION LOG statement, 6-29 OPTION MAS statement, 6-30 OPTION ORI statement, 6-32 OPTION OUT statement, 6-33 PAUSE statement, 6-52 ROUTE statement, 6-4 DEV parameter, FREE statement, 6-22 Device assignment sets card reader, 3-10 different volumes on same device, 4-14 disk, 3-20 diskette, 3-20 DVCVOL JPROC call, 5-13 file name assignment, 3-5 job control statements, 2-1 minimum control stream, 3-i renamed file, 4-40 tape, 3-14 7004 4623-000 C, Index temporary work files, 5-2 workstation, 3-21, 3-22 (See also Devices) Device independent control character codes, 6-19 Device type codes, equating logical unit numbers, 6-10 Devices adding, 3-14 alternate, 4-14 assigning by physical address, 4-11 assigning multiple workstations to a file, 4-10 different volumes on same device, 4-12 identifying, 3-4, 4-9 logical unit numbers (See Logical unit numbers) multiple volumes in a file, 4-14 optional device assignment, 4-12 releasing (freeing), 6-22 too many on same volume, 5-13 using, 2-2 using multiple, SYSRES, or $Y$RUN file, 4-9 Dialog processor audit version, 9-10 device assignment set for workstation, 3-21 job control considerations, 6-27, 6-76 Dialog responses, changing, 9-9 Dialog session, control stream Section 9 Disk device assignment set, 3-20 Disk file area allocation amounts, 4-31 changing specifications, 4-33 contiguous space, 4-28 cylinders, 4-30 description, 2-5 EXT statement, 4-27 formatting the file, 4-28 more disk space needed, 4-29 Disk files changing label, 4-40 reinitializing, 4-45 scratching, 6-24 Disk volumes file allocation, 2-5 reserving extent storage area, 4-44 sharing, 4-24 temporary work files, 5-5 7004 4623-000 (See also Volumes) Diskette device assignment set, 3-20, 3-21 Diskette files area allocation, 2-5, 4-34 data-set-label, 2-6 EXT statement, 4-34 format-label, 2-5 scratching, 6-24 spooling, 6-1, 6-9 Diskette volumes extent information storage area, 4-44 multifile, 5-13 DLOAD facility, 2-13, 6-54 DLOAD parameter, SPF statement, 6-54 DOF option, 6-27 DST job control statement, 6-3 Dummy data set, 3-13 Dump, edited, 6-28 DUMP option, 6-27 DVC job control statement adding card input, 3-10 assigning device by physical address, 4-11 assigning multiple workstations to a file, 4-10 assigning optional devices, 4-11 description, 4-8 device assignment sets, 3-4 different volumes on same device, 4-11 disk, 3-20 diskette, 3-20, 3-21 JPROC calls (DVCVOL), 5-13 minimum control stream, 3-1 multiple volumes in a file, 4-13 specifying a remote file, 4-16, 6-5 tape, 3-15 using multiple devices, 4-9 workstation, 3-21 DVC parameter, temporary work files, 5-5 DVCDKT JPROC call, 5-16 DVC PROG statement description, 4-17 DVCVOLJPROC call 5-13 DVCVTP JPROC call description, 5-16 linkage editor JPROC call, 5-23 Dynamic expansion main storage, 2-13 overriding SYSGEN limits, 6-56 user job region, externally referenced program modules, 6-56 Index-3 Index Dynamic extension, disk file description, 4-29 JPROC calls, 5-6 Dynamic skip function, 6-69 E Embedded data entering from a workstation, 9-8 EOD option, 6-27 JPROC definitions, 8-6 sets, replacing in expanded control streams, 6-70 start of data and end of data, 3-12 substituting, 6-69 END directive ending JPROC definition, 8-5 target for branching, 7-4 End-of-data (/*)job control statement, 3-12 End-of-job (/&)job control statement, 3-7 End-of-job process, 1-9 End-of-job-step process, 1-8 ENTER parameter, linkage editor JPROC call, 5-31 EOD=xx option, 6-27 EQU job control statement description, 6-10 multiple devices, 4-9 Error messages undefined set symbol, 6-37 unequal length character strings, 6-38 Errors abnormal termination, 2-10 renaming disk files, 4-40 testing UPSI byte, 6-64 EXEC job control statement abnormal program termination, 4-50, 6-68 format and description, 3-6 job step delimiter, 1-1 locating load module, 4-46 minimum control stream, 3-2 specWying alternate library file for JPROCs, 8-9 task switching priority, 4-48 using the linkage editor, 5-20 Executive, 1-3 Expanded control streams, replacing embedded data, 6-70 Index4 Expiration date, file, 4-37 Exponent underflow exception interrupt, 6-38 EXT job control statement for disk allocating disk area for new files, 3-20 allocation amounts, 4-31 changing specifications of previously allocated file, 4-33 cylinder allocation, 4-30 description, 2-5, 4-27 device assignment set for diskette, 3-20, 3-21 dynamic extension, 4-29 formatting a file and using contiguous space, 4-28 specifying file access method, 4-27 EXT job control statement for diskette, 2-5, 2-6, 4-34 EXT parameter, ALLOC JPROC call, 5-11 EXTEND option, access JPROC call, 5-10 Extending files, 4-45 Extent information storage area, 4-44 Extents allocating disk area for new files, 3-20 allocating file with JPROC call, 5-11 allocation amounts, 4-31 changing specifications, 5-6 data-set-label diskette EXT statement, 4-34 description, 2-5, 2-7 disk EXT statement, 4-27 format-label diskette EXT statement, 4-27 LFD statement, 3-5 reserving, 4-44 EXTSP parameter, 5-6 - F FD entry, changing, 6-60 File access methods, 4-27 File allocation amounts, 4-31 changing specffications, 4-33 data-set-label diskette, 2-7, 4-34 disk, 2-5 format-label diskette, 2-5 JPROC call, 5-10 terms, 4-30 7004 4623-000 C Index File cataloging description, 6-26 SKIP statement, 6-63 File definition changing at run time, 6-59 linkage editor JPROC call, 5-21 File identifiers description, 2-4 job step temporary files, 3-23 JPROC calls, 5-2, 5-12 labeled tapes, 3-17 qualifiers, 4-43 using efficiently, 4-35 File names assigning, 3-5 description, 2-7 JPROC calls, 5-2 tape, 3-15 File serial numbers, multivolume files, 4-36 File symbiont, storing JPROC definitions, 8-7 FILE system console command, 1-9 FILE workstation command, 1-9 FILEID parameter, DATA statement, 6-7 Files accessing previously allocated, 5-8 allocating with a JPROC call, 5-10 cataloging (See File cataloging) different versions, 4-39 existing specifications, 4-45 formatting and using contiguous space, 4-28 identifiers, 2-4 job step temporary, 3-23, 5-2 job temporary, 3-23, 5-2 logical, 4-44 logical names, 2-7 multivolume (See multivolume files) naming, 2-7, 3-5 renaming, 4-40 scratching, 6-24 spooling, 6-1 (See also Disk files) FIN job control statement, 3-8 Floating-point significant exception interrupt, 6-37 Format-label diskette (See Diskette files) FORMNAME parameter, VFB statement, 6-17 7004 4623-000 Forms control, 6-16 Forms, special (SPL statement), 6-2 FORTRAN, naming your files, 2-8 Forward spacing, 6-20 FREE job control statement, 6-22 G GABRDUMP option, 6-27 GBL job control statement, 7-5 GDUMP option, 6-27 Generation number, file, 4-39 GJOBDUMP option, 6-28 Global set symbols calling control streams, 6-47 description, 7-5 GO job control statement branching, 2-11, 7-1 description, 7-1 GO option, 6-28 Graphic symbols, print cartridge, 6-11 GSYSDUMP option, 6-28 H HDR option, 6-28 HELP screens, job control dialog, 9-3 Hexadecimal characters LCB statement, 6-11 SET COMREG statement, 6-41 HOLD option, 6-28 HOLD parameter, SPL statement, 6-2 Host-id, user-id pair (See Destination) HOST parameter DVC statement, 4-16 DVC PROG statement, 4-18 HP parameter, 6-19 IF job control statement branching, 2-11 description, 7-2 IGNORE parameter DATA statement, 6-8 LFD statement, 4-44 IN parameter, linkage editor JPROC call, 5-24 Index-5 Index Temporary work files changing extent specifications, 5-6 job step, 3-23, 5-2 setting up, 5-2 using your own volume, 5-5 Termination, job, 2-10 TEST option, 6-37 Test pattern page, 6-3 Time of day, block characters, 5-35 TRACE option, 6-37 Tracks, 2-6 Transfer address, ENTER parameter (LINK JPROC call), 5-31 Translated control streams, calling, 6-49 TSK option, 6-38 TYPE parameter LCB statement, 6-14 VFB statement, 6-18 U UID job control statement, 3-22, 4-11, 4-16 Unconditional branching, 7-1 UNDEFINED option, 6-38 UNEQUAL option, 6-38 USE job control statement dialog processor, 3-22, 6-76 library services, 6-78 menu services, 3-22, 6-74 screen format services, 3-22, 6-73 source module access, 6-78 USE parameter, VFB statement, 6-18 User-id, host-id pair (See Destination) User local data area, 6-41 User program switch indicator (UPSI) setting, 6-39 testing (SKIP statement), 6-64 V Version number block characters, 5-36 file, 4-39 Vertical format buffers changing, 5-24 skip codes, 6-2 VFB statement, 6-16 Vertical line positioning, 6-16 VFB job control statement description, 6-15 linkage editor JPROC call, 5-24 SPL statement, 6-3 VOL job control statement description, 4-19 device assignment set for disk, 3-20 device assignment set for diskette, 3-20, 3-21 device assignment set for tape, 3-15 DVCVOL JPROC call, 5-13 extending tape volumes, 4-23 ignoring or changing volume serial number, 4-24 multivolume files, 4-19, 4-27 sharing disk volumes, 4-24 tape volumes, special characteristics, 4-21 VOL parameter, temporary work files, 5-5 Volume serial numbers alternate library file, 8-9 description, 2-3 ignoring or changing, 4-23 multivolume files, 4-19, 4-36 tape, 3-15 temporary work files, 5-5 VOL statement, 4-19 Volume table of contents (VTOC), B-2 Volumes data-set-label diskette file allocation, 2-7 different on same device, 4-12 disk file area allocation, 2-5 disk, sharing, 4-24 format-label diskette file allocation, 2-5 identifying files, 2-3 multiple, assigning file serial numbers, 4-36 multiple, online simultaneously, 4-27 releasing (freeing), 6-22 tape, extending, 4-22 tape labels, 3-17 tape, special characteristics, 4-21 temporary work files, 5-2, 5-5 too many devices, 5-13 VOL statement, 3-14, 4-19 C) C) Index-12 7004 4623-000 Index w SYMBOLS Work files linkage editor, 5-29 temporary, setting up, 5-2 (See also Scratch files) WORK JPROC call changing extent specifications, 5-6 description, 5-2 using your own volume, 5-5 Workstation assigning more than one to a file, 4-10, 4-15 building a job control stream, (figure) 9-2 changing control stream execution, 6-35 communicating with operator, 6-50 device assignment set, 3-21 dynamic skip function, 6-69 master, reassigning, 6-30 originator, reassigning, 6-32 releasing (FREE statement), 6-23 WRTBIG JPROC call, 5-33 WRTSML JPROC call, 5-33 V $Y$CAT, 6-26 $Y$JcS adding cards to control streams, 6-61 calling control streams, 6-48 description, B-2 restarting a job, 6-42 storing job control streams, 1-9 $Y$LOD description, B-i locating load module, 4-46 $Y$MAC, B-i $Y$OBJ ALIB and RLIB parameters (LINK JPROC call), 5-25 description, B-I $Y$RUN locating load module, 4-46 preparing ajob for execution, 1-6 temporary work files, 5-3 using the linkage editor, 5-18 $Y$SAVE, running a job control stream, 1-12 $Y$SRd, B-i x XIJF option, 6-38 7004 4623-000 Index-13 C C
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.6 Linearized : Yes XMP Toolkit : 3.1-701 Create Date : 2012:06:29 17:04:41+01:00 Creator Tool : Xerox WorkCentre 7535 Modify Date : 2012:07:01 23:12:09+02:00 Metadata Date : 2012:07:01 23:12:09+02:00 Producer : Xerox WorkCentre 7535 Format : application/pdf Document ID : uuid:dce53d31-1601-432c-8f40-9f1f0f182932 Instance ID : uuid:8e8f961f-6e08-48c8-a250-d75a2fb3e551 Page Count : 334 Creator : Xerox WorkCentre 7535EXIF Metadata provided by EXIF.tools