Easy Tri Eve UserGuide
Easy Tri Eve UserGuide
SP3
Release 6.2, May 1996 Updated: April 1999 This documentation and related computer software program (hereinafter referred to as the Documentation) is for the end users informational purposes only and is subject to change or withdrawal by Computer Associates International, Inc. (CA) at any time. THIS DOCUMENTATION MAY NOT BE COPIED, TRANSFERRED, REPRODUCED, DISCLOSED OR DUPLICATED, IN WHOLE OR IN PART, WITHOUT THE PRIOR WRITTEN CONSENT OF CA. THIS DOCUMENTATION IS PROPRIETARY INFORMATION OF CA AND PROTECTED BY THE COPYRIGHT LAWS OF THE UNITED STATES AND INTERNATIONAL TREATIES. TO THE EXTENT PERMITTED BY APPLICABLE LAW, CA PROVIDES THIS DOCUMENTATION AS IS WITHOUT WARRANTY OF ANY KIND, INCLUDING WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. IN NO EVENT WILL CA BE LIABLE TO THE END USER OR ANY THIRD PARTY FOR ANY LOSS OR DAMAGE, DIRECT OR INDIRECT, FROM THE USE OF THIS DOCUMENTATION, INCLUDING WITHOUT LIMITATION, LOST PROFITS, BUSINESS INTERRUPTION, GOODWILL OR LOST DATA, EVEN IF CA IS EXPRESSLY ADVISED OF SUCH LOSS OR DAMAGE. THE USE OF ANY PRODUCT REFERENCED IN THIS DOCUMENTATION AND THIS DOCUMENTATION IS GOVERNED BY THE END USERS APPLICABLE LICENSE AGREEMENT. The manufacturer of this documentation is Computer Associates International, Inc. Provided with Restricted Rights as set forth in 48 C.F.R. Section 12.212, 48 C.F.R. Sections 52.227-19(c)(1) and (2) or DFARS Section 252.227.7013(c)(1)(ii) or applicable successor provisions.
1996-2000 Computer Associates International, Inc., One Computer Associates Plaza, Islandia, New York 11749. All
rights reserved. All trademarks, trade names, service marks, or logos referenced herein belong to their respective companies.
Contents
Chapter 2: Overview
Before You Begin.............................................................................. 21 Things You Should Know .................................................................. 21 Reading This Guide ....................................................................... 21 Program Examples ........................................................................ 23 Flowchart Symbols ........................................................................ 23 Introduction to CA-Easytrieve/Plus ............................................................ 24 Benefits .................................................................................. 24 Capabilities ............................................................................... 24 Current Technology ....................................................................... 28 Environments ............................................................................. 28 Structure of a CA-Easytrieve/Plus Program ..................................................... 28 Environment Definition Section ............................................................. 29 Library Definition Section .................................................................. 29 Activity Definition Section ................................................................. 29 Sample Program ......................................................................... 211
Contents
iii
iv
Continuations ............................................................................. 43 Words and Delimiters ..................................................................... 43 Keywords ................................................................................ 44 Multiple Parameters ....................................................................... 44 Field Names .............................................................................. 44 Labels .................................................................................... 45 Alphabetic Literals ........................................................................ 45 Numeric Literals .......................................................................... 45 Hexadecimal Literals ...................................................................... 45 Identifiers ................................................................................ 46 Arithmetic Operators ...................................................................... 46 Describing Files and Fields ..................................................................... 46 Defining Data ............................................................................. 46 FILE Statement ............................................................................ 47 DEFINE Statement ........................................................................ 48 FILE Statement Revisited ................................................................. 419 Virtual File Manager (VFM) ............................................................... 419 EXIT Parameter .......................................................................... 420 COPY Statement ......................................................................... 421
Contents
vi
Chapter 8: Macros
Introduction .................................................................................. 81 Using Macros ................................................................................. 82 What is a CA-Easytrieve/Plus Macro? ....................................................... 82 Invoking Macros .......................................................................... 82 PERSNL File Field Definitions .......................................................... 83 Macro Invocation Statement ............................................................ 84 Macro Nesting ........................................................................ 84 Creating and Storing Macros ................................................................... 85 Defining Macros .......................................................................... 85 Prototype Statement ................................................................... 85 Macro Body ........................................................................... 86 Macro Termination Command .......................................................... 86 Storing Macros ............................................................................ 86 Parameter Substitution in Macros ............................................................... 87 Positional Parameters ...................................................................... 87 Keyword Parameters ...................................................................... 88 Prototype Statement ....................................................................... 88 Prototype Statement Parameter Examples ................................................ 88 Macro Invocation Statement ................................................................ 89 Parameter Substitution Examples .......................................................... 810 Positional Parameters ................................................................. 810 Keyword Parameters ................................................................. 811 Rules for Substituting Parameters .......................................................... 812 Ampersands (&) and Periods (.) in Macros .................................................. 813 Instream Macros ............................................................................. 813 Operation ............................................................................... 814
Contents
vii
System-Defined Fields ........................................................................ General Purpose Fields .................................................................... File Processing Fields ..................................................................... Report Processing Fields...................................................................
96 97 97 98
Index
viii
Chapter
Organization
This CA-Easytrieve/Plus User Guide is divided into several chapters:
I
Overview gives you a complete overview of CA-Easytrieve/Plus and this User Guide. It tells you what CA-Easytrieve/Plus can do, where it can do it, and what the program looks like. Standard Reporting with CA-Easytrieve/Plus takes you, tutorial style, through the process of creating a CA-Easytrieve/Plus report. Library SectionDescribing and Defining Data tells you how to describe the files for processing. It includes special features that CA-Easytrieve/Plus provides to make this job easier. Activity SectionProcessing and Logic describes the basics of writing an application program with CA-Easytrieve/Plus. Everything from IF statements to table processing. Activity Section Input and Output teaches you how to handle (or let CA-Easytrieve/Plus handle) input and output files, from automatic I/O to random access of VSAM files. Activity SectionReporting explains all of the things you did not learn about reporting in Chapter 3. Macros teaches you how to create and invoke CA-Easytrieve/Plus macros.
11
Programming Techniques describes diagnostic messages and CA-Easytrieve/Plus debugging facilities. The Index provides a listing to facilitate references to terms and procedures.
12
Documentation Conventions
Documentation Conventions
The following conventions are used throughout this guide for illustrative purposes. Notation {braces} [brackets] | (OR bar) (parentheses) ... CAPS lowercase Meaning Mandatory choice of one of these entries. Optional entry or choice of one of these entries. Choice of one of these entries. Multiple parameters must be enclosed in parentheses. Ellipses indicate that you can code the immediately preceding parameters multiple times. All capital letters indicate a keyword, name, or field used in a program example. Lowercase letters represent variable information in statement syntax. If the same variable types recur in a statement, they are made unique by adding a numeric suffix, such as literal-2.
13
Documentation Conventions
Variable Parameters
Parameter field-name file-name index name integer job-name letter literal proc-name program-name record-name report-name sort-name Meaning Data field defined in your program. Unique file name defined in the library section of your program. Name of an INDEX data item. Numeric literal (a whole number greater than zero). Name of a JOB activity. Single alphabetic character (such as an edit mask identifier). Text string enclosed in quotes or a numeric constant. Name of a procedure. Name of a program written in a language other than CA-Easytrieve/Plus (such as COBOL or Assembler). Name of an IMS/DLI or a CA-IDMS entity. Name of a REPORT. Name of a SORT activity.
14
Chapter
Overview
Overview
21
Readers are always directed to return to the tutorial after they complete the material at the end of such a branch. The goal for the first pass through the guide is to read Chapters 2 and 3 and the first level readings of all the rest of the chapters. Doing so gives you a good understanding of CA-Easytrieve/Plus basics and lets you perform the following tasks:
I
Write a complete CA-Easytrieve/Plus program using automatic input and output features. Generate standard reports. Perform calculations and use conditional expressions. Perform simple macro invocation. Read and understand diagnostic messages.
I I I I
Reading Two The second reading begins at level 2 of Chapter 4 and continues with level 2 of Chapters 5 through 9. After completing this second reading of the CA-Easytrieve/Plus User Guide, you should be able to perform these tasks:
I
Write slightly more complex CA-Easytrieve/Plus programs using programmer-controlled input and output commands. Generate label reports. Perform data assignments and moves and use loops and branching in program logic. Create macros. Perform basic debugging techniques.
I I
I I
Reading Three The third and final reading, like reading two, continues your journey through Chapters 4 through 9. It teaches you some of the more sophisticated commands and techniques available with CA-Easytrieve/Plus. After this reading, you should be able to perform these tasks:
I I I I
Use advanced FILE statement parameters including VIRTUAL and EXIT. Perform sorts. Use procedures and tables. Perform programmer-controlled input and output of randomly accessed files, including VSAM. Use REPORT procedures. Use positional and keyword parameters of the MACRO prototype statement.
I I
22
Program Examples
Most of the program examples in this guide use an input file named PERSNL. This file is made available when CA-Easytrieve/Plus is installed so that new users can enter data and execute the program examples shown in the documentation. (See the CA-Easytrieve/Plus Installation Guide for information on sample files provided with CA-Easytrieve/Plus.) Many of the program output examples, such as reports, were edited or shortened for illustrative purposes. Reports you produce yourself from the PERSNL file can be much longer than the ones shown in this guide.
Flowchart Symbols
The following flowchart symbols illustrate the same concepts throughout this document.
Overview
23
Introduction to CA-Easytrieve/Plus
Introduction to CA-Easytrieve/Plus
Benefits
CA-Easytrieve/Plus is an information retrieval and data management system designed to simplify computer programming. Its English-like language and simple declarative statements provide the new user with the tools needed to produce comprehensive reports with ease. Its comprehensive logic and processing facilities give the experienced data processor the capabilities to perform complex programming tasks. Unlike other programming languages that provide ease of use while sacrificing flexibility, CA-Easytrieve/Plus provides the best of both worlds.
Capabilities
CA-Easytrieve/Plus has the capabilities of a retrieval system and the comprehensiveness and flexibility required for complex reports, data extraction, and file maintenance requirements. File Access The CA-Easytrieve/Plus file access features provide all standard retrieval system capabilities, plus the following:
I I
Accepts up to 890 input or output files. Synchronizes file processing (based on keys) of an unlimited number of files, including matched conditions and duplicate checking. This reduces complex matching logic down to one statement. Tests for file availability and current record count. Prints statistics on files used, including number of records processed and attributes of each file. Provides in-core binary search of external or instream table files. Prints file status and error analysis report at point of error during abnormal termination. Provides an easy method for establishing temporary work files without special job control or file allocation statements.
I I
I I
24
Introduction to CA-Easytrieve/Plus
Double-Byte Character Set (DBCS) Support CA-Easytrieve/Plus supports Double-Byte Character Set (DBCS) character representations. See the CA-Easytrieve/Plus Reference Guide for more information on DBCS support. Field Definition The CA-Easytrieve/Plus methods of defining all types of record structures and field formats are consistent and easy to use, including:
I I
Defining all field formats, including binary and unsigned packed fields. Supporting alphanumeric field types, containing both EBCDIC and DBCS format data, plus a MIXED field type for those fields that contain a mixture of both EBCDIC and DBCS format characters. Providing flexible edit masks for report formats or displaying data, including blank-when-zero, automatic DBCS conversion, and hex display. Establishing EBCDIC, DBCS, and MIXED initial values for working storage fields. Providing default report headings to enhance standards. Permitting multiple use of field definitions with the COPY keyword, reducing coding and maintenance.
I I
Logic Process The purpose of any information retrieval and application development system is to provide complete conditional logic. CA-Easytrieve/Plus provides this logic, plus the following:
I
Provides standard programming constructions, such as nested IFs, DO WHILE, and PERFORM statements. Provides powerful calculation capabilities, including bit manipulation. Performs special tests useful in editing, including alphabetic, numeric, spaces, zero, and bit testing. Permits string manipulation. Supports move for corresponding fields. Includes special one-time procedures for start of processing and finish of processing. Sorts on any number of keys.
I I
I I I
Overview
25
Introduction to CA-Easytrieve/Plus
File Output Routine file maintenance is faster and simpler because of enhanced capabilities of CA-Easytrieve/Plus, including:
I I I
Loading and updating files, including VSAM, IMS/DLI, IDMS, and SQL. Saving report extract work files for subsequent use. Providing a selective hex dump of a file or specific fields.
Report Output The CA-Easytrieve/Plus reporting features make producing reports a simple, uncomplicated process. The flexibility built into the system through specialized report procedures makes it easy to produce customized reports without compromise. CA-Easytrieve/Plus:
I I
Produces unlimited reports from a single pass of the data. Automatically formats reports including where character output sizes vary due to different data types (EBCDIC and DBCS formats) and font specifications (see the CA-Easytrieve/Plus Extended Reporting Facility Guide). Provides customizing alternatives to all report format features. Provides mailing labels of any size. Provides control breaks on any number of keys. Automatically creates a summary file containing subtotals. Processes only those fields that your REPORT statements require. Generates reports to separate logical printers or other output media. Provides control break level access for special logic processing, which is useful when only certain report lines are generated for certain specific levels of control breaks. Provides specialized report procedures for user flexibility, such as: BEFORE/AFTER-LINE, ENDPAGE, TERMINATION, BEFORE/AFTER-BREAK, REPORT-INPUT. Permits explicit positioning of print layout for pre-printed forms.
I I I I I I I
26
Introduction to CA-Easytrieve/Plus
Virtual File Manager (VFM) VFM provides an easy method for establishing temporary work files without special job control or file allocation statements. By using VFM, you can establish your own extract or temporary files using only CA-Easytrieve/Plus keywords. VFM's own data management techniques ensure its operating efficiency standards, including:
I
Maintaining information in memory. If the memory area is exhausted, VFM writes the excess data to a single spill area. Defining only one physical file. Determining the best blocking factor based on device type, providing a 90 percent disk use. Releasing and recovering occupied space as the virtual file is read back into your program. Automatically spooling files containing report information created as a result of sequenced reports or multiple reports in the same activity.
I I
Debugging Capabilities The CA-Easytrieve/Plus debugging aids ensure that all information necessary to pinpoint the cause of an abnormal termination is easily readable by:
I
Providing an error analysis report that pinpoints most errors immediately, including the source statement number in error and a FLOW table of what statements executed in what series. Providing optional data processing oriented displays, such as data maps (DMAPs) and program maps (PMAPs). Trapping invalid file references during execution to prevent a system dump.
Overview
27
Current Technology
CA-Easytrieve/Plus represents the maximum in efficiency because it was developed with the latest in programming technology, including:
I I I I I I I
Mapping programs in 4K segments. Mapping working storage on double-word boundary. Providing a one-pass compiler. Directly generating the object code. Providing PUSH/POP facilities for MACRO. Providing security on VSAM, IMS, and IDMS use. Automatic EBCDIC to DBCS conversion facilities and user exits for implementing Phonetic Translation routines.
Environments
CA-Easytrieve/Plus operates on the IBM 370, 30xx, 43xx, and compatible processors in the DOS/VSE, OS/VS, and VM/CMS environments. Under TSO, CMS, and ICCF, CA-Easytrieve/Plus can run interactively for data inquiry, analysis, and reporting. The output can be returned back to your terminal screen or routed to a printer.
28
JOB activities read information from files, examine and manipulate data, write information to files, and initiate printed reports. SORT activities create sequenced files. (Files with records in alphabetical or numerical order.)
You can code one or more procedures (PROCs) at the end of each activity. Procedures are separate modules of program code that you use to perform specific tasks and are described in Chapter 5, Activity SectionProcessing and Logic. REPORT subactivities are areas in a JOB activity where reports are described. You can code one or more REPORT subactivities after the PROCs (if any) at the end of each JOB activity. You must code any PROCs used in a REPORT subactivity (REPORT PROCs) immediately after the REPORT subactivity where you use them. The following example shows some of the CA-Easytrieve/Plus keywords and other items in the chapters where they are usually located. It gives the general order of CA-Easytrieve/Plus statements in a program.
Overview
29
210
Sample Program
The following contains an example of a simple CA-Easytrieve/Plus program. This program produces a standard report and is used in the next chapter as a starting point for the tutorial. We show it here to further illustrate the basic structure of an CA-Easytrieve/Plus program. (The environment section is omitted.)
FILE PERSNL FB(150 1800) NAME 17 8 A EMP# 9 5 N DEPT 98 3 N GROSS 94 4 P 2 JOB INPUT PERSNL NAME FIRST-PROGRAM PRINT PAY-RPT REPORT PAY-RPT LINESIZE 80 TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS } } } LIBRARY SECTION } } } } } ACTIVITY SECTION } }
The above program produces the following output (as is the case in many of the output examples in this guide, it was edited for illustrative purposes).
11/02/88 PERSONNEL REPORT EXAMPLE-1 DEPT 903 943 915 935 911 914 917 918 911 932 921 911 943 NAME WIMN BERG CORNING NAGLE ARNOLD MANHART TALL BRANDOW LARSON BYER HUSS POWELL MCMAHON EMP# 12267 11473 02688 00370 01963 11602 11931 02200 11357 11467 11376 11710 04234 GROSS 373.60 759.20 146.16 554.40 445.50 344.80 492.26 804.64 283.92 396.68 360.80 243.20 386.40 PAGE 1
If you are familiar with other programming languages or report generators, you already realize that CA-Easytrieve/Plus takes care of a lot of details for you; details that you would otherwise spend countless hours controlling and typing in yourself. In the next chapter, you are given a chance to jump right in and start creating your own CA-Easytrieve/Plus reports. We hope you enjoy programming with CA-Easytrieve/Plus; in fact, we are sure you will. Good Luck!
Overview
211
Chapter
How to quickly create a report using CA-Easytrieve/Plus. How to redefine your report to suit your needs. How CA-Easytrieve/Plus macros can save you programming time. What to do when you encounter an error.
31
Lesson 2
CA-Easytrieve/Plus activity section, including JOB and IF statements. Also includes a look at working storage fields defined in the library section.
Lesson 3
CA-Easytrieve/Plus activity section, including report output with the PRINT Statement. Also includes a return to the library section for a look at the HEADING and MASK parameters of the DEFINE statement.
Lesson 4
CA-Easytrieve/Plus activity section, including the REPORT statement and report definition statements.
Lesson 5
The program shown above is very short, only 11 lines long. But packed into this simple program is the power to produce a completely formatted report, such as date, page number, title, column headings, and properly spaced detailed lines. In other languages, you might expect to write 20 or more times this much code to produce the same report.
32
This report is a simple edited display of fields from a file of employees named PERSNL. (As we mentioned in the Overview chapter, this sample file is provided with CA-Easytrieve/Plus. Ask your system administrator where it is stored at your site.) It is a good starting point for describing some of the most important CA-Easytrieve/Plus keywords.
FILE Statement
The first line of our program looks like this:
FILE PERSNL FB(150 1800)
This line contains the CA-Easytrieve/Plus FILE statement. You must include a FILE statement for every file you use as input to your program. It tells CA-Easytrieve/Plus where to get the data you want processed and can also tell it some things about how that data is stored. To do this, it must include a file name. In our example, that name is PERSNL.
33
The rest of line 1 is optional. It tells CA-Easytrieve/Plus some information about how the PERSNL file is stored, which makes accessing it more economical. The PERSNL file contains records of a fixed length of 150 characters stored in 1800 character blocks. This is indicated as one parameter, FB(150 1800). (FB stands for Fixed, Blocked.) Multiple subparameters are always enclosed in parentheses in CA-Easytrieve/Plus. Since record length (150) and blocksize (1800) are mandatory subparameters of FB, we include them in parentheses.
DEFINE Statement
There are four DEFINE statements in our program:
NAME EMP# DEPT GROSS 17 9 98 94 8 5 3 4 A N N P
These four lines describe fields in a record of the PERSNL file. You do not see the word DEFINE in the above lines, but it is implied. We could have written these lines as:
DEFINE DEFINE DEFINE DEFINE NAME EMP# DEPT GROSS 17 9 98 94 8 5 3 4 A N N P
You can use the DEFINE statement right in the middle of your program logic if you need a quick working storage field. Used there, the DEFINE keyword is required; it cannot be just implied. We cover this more thoroughly in the Library Section-Describing and Defining Data chapter.
Using DEFINE to Describe Fields
The DEFINE statements just shown describe four of the fields in a record of the PERSNL file. They do not have to describe all the fields in the record or the spaces between fields because, in CA-Easytrieve/Plus, that is not necessary. You only describe what you need to use. The basic components of a field definition are fairly easy to understand; let us label them for you. Starting Position in Field Name Record NAME EMP# DEPT GROSS 17 9 98 94
34
When describing a field, you need to identify it with a name, give its location in the record (starting position), its length, its type, and number of digits to the right of the decimal point, if any. You must identify these items in the order shown above (left to right) and you must separate them with spaces. In our example, we align them in columns (top to bottom) for readability, but that is not required.
Field Name
The field name identifies the field as a unique storage location. It is what you use later to refer to your data.
Starting Position
The starting position, or location, is where (in the record) the first character of the field begins. Beginning at the first character of data in a record of the PERSNL file, you count nine characters to the right to land on the first character of the EMP# field:
EMP# field NAME field --------------------------------------| | | | | | | | |9 |9 |9 |9 |9 | | | | X| X| X| X| X| X| X| X| . . . ------------------------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 . . . A Physical record in the PERSNL File
By counting 17 characters to the right from position 1, you land on the first character of the NAME field and so on. You do not have to describe fields in your program in the same order that they occur in the record. In our example, we define NAME before EMP#, even though it physically comes after EMP# in the record.
Length of Field
The length of the field or field length is simply the number of characters of storage space (bytes) the field takes up in the record. In the above example, you can easily see that EMP#, which has a field length of 5, takes up 5-character positions, or bytes, in the PERSNL record.
35
Data Type
Data type describes the type of data stored in a field. The fields in the example we are following consist of three different data types. Field NAME EMP# DEPT GROSS Data Type AAlphanumeric NNumeric NNumeric PPacked Decimal Stores numbers in zoned decimal format Stores numbers in internal packed decimal format Purpose Stores non-numeric data
In our example, the field GROSS is the only field that contains characters to the right of a decimal point:
Decimal Positions --------GROSS 94 4 P 2
When this field prints on your report, it shows up with two numbers to the right of a decimal point (for example: 999.99).
FILE tells CA-Easytrieve/Plus about the data file you are accessing (or creating). DEFINE tells CA-Easytrieve/Plus which fields to use from the file.
Once you define your data, you can go on to processing activities. For More Information If you want to add more detail to your understanding of the library section, turn to Chapter 4, Library Section-Describing and Defining Data. If you are content with what you learned so far, continue with Lesson 2.
36
JOB Statement
The first line after the library section in our sample program is prefixed by the word JOB:
JOB INPUT PERSNL NAME FIRST-PROGRAM
When CA-Easytrieve/Plus encounters a JOB statement, it knows that it is about to begin some form of processing. The JOB statement can also automatically provide input (if input is available) to the processing statements that follow it. In the line shown above, taken from our sample program, everything but the word JOB is optional. Input to a JOB Activity The word JOB in CA-Easytrieve/Plus is like a sign that reads Work in Progress. It indicates that processing is to follow. Typically, processing requires some type of file input. Most programming languages require you, the user, to control the availability of input files. Files are usually opened and then some sort of input statement is executed in a loop, checking for an end-of-file condition each time it executes. Although CA-Easytrieve/Plus does give you the flexibility to control input, it also has the power to do all the dirty work for you. This is called automatic input.
Automatic Input
By using the INPUT parameter of the JOB statement, you indicate that the named file (in this case PERSNL) should be automatically made available to your program. It is like saying, I want to use this file and then letting CA-Easytrieve/Plus do the rest.
37
In fact, CA-Easytrieve/Plus is so smart, if you do not specify INPUT, it looks for input and uses the first file described in the library section. (Unless the JOB activity is preceded by a SORT activity (described in Chapter 5, Activity Section-Processing and Logic), then CA-Easytrieve/Plus uses the output from that SORT.) Since our sample program only has one input file (PERSNL), the INPUT parameter on the JOB statement is completely optional. Without it, CA-Easytrieve/Plus looks for input and uses the first file (the only file) in our library section, PERSNL. Naming a JOB Activity The next step after the INPUT parameter in our sample program is the word NAME. This simply tells CA-Easytrieve/Plus that a job name follows. You name a JOB activity for documentation purposes only. It helps to give JOB activities a descriptive name, especially when you have more than one in your program. In our example, we named the JOB activity FIRST-PROGRAM. We did this by typing the parameter NAME followed by a name of our choice.
A Look At Logic
The program we described so far is capable of producing a complete report. All that this program requires is a description of the data we want to print and a few other lines of code, which we describe in the following pages of this tutorial. In the mean time, to make things a little more interesting, we are going to add a few things to our program. A New Condition We talked a lot about a report program that simply extracts some data from a file and prints it out. Granted, CA-Easytrieve/Plus makes doing this very easy and automatic, but it can do so much more!
38
Let us imagine your boss just came in and said that the report you are working on has to include net pay and deductions. Let us look again at the program we were working on so far.
FILE PERSNL NAME EMP# DEPT GROSS FB(150 17 8 9 5 98 3 94 4 1800) A N N P 2
JOB INPUT PERSNL NAME FIRST-PROGRAM PRINT PAY-RPT REPORT PAY-RPT LINESIZE 80 TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS
The program does access a field called GROSS, which contains employee gross pay. Since net pay (take home pay) is the gross pay minus any deductions, you quickly realize that you need to figure out what to deduct. It just so happens, you are a payroll expert and you know that employees who make $500 or more get a 28 percent deduction; the rest do not get any deduction because they are too poor. (Or at least you think so because you are one of them!) You can state the condition we just described with a simple conditional expression:
IF GROSS GE 500 DEDUCTIONS = .28 * GROSS NET-PAY = GROSSDEDUCTIONS ELSE NET-PAY = GROSS DEDUCTIONS = 0 END-IF
In this expression, we say: If the gross pay is greater than or equal to 500, then deduct 28 percent to give the net pay. Otherwise, if the gross is less than 500, then there are no deductions and net-pay is the same as gross. CA-Easytrieve/Plus requires an END-IF to complete the expression.
39
Now that we have a logical statement to describe our condition, we simply type it into our program, placing it in the JOB activity after the JOB statement.
FILE PERSNL NAME EMP# DEPT GROSS FB(150 17 8 9 5 98 3 94 4 1800) A N N P 2
JOB INPUT PERSNL NAME FIRST-PROGRAM IF GROSS GE 500 DEDUCTIONS = .28 * GROSS NET-PAY = GROSS-DEDUCTIONS ELSE NET-PAY = GROSS DEDUCTIONS = 0 END-IF PRINT PAY-RPT REPORT PAY-RPT LINESIZE 80 TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS } } } } } } }
new logic
There are a couple of details we still need to take care of. We need a place to store the results for our two new variables, DEDUCTIONS and NET-PAY. They can be stored in a place known as working storage.
310
You can describe the above fields in words as working storage fields, four characters long, in packed decimal format with two decimal places. Let us place these fields in the library section of our program (this lets them be more easily seen than if they were placed in the activity section).
FILE PERSNL FB(150 1800) NAME 17 8 A EMP# 9 5 N DEPT 98 3 N GROSS 94 4 P 2 DEDUCTIONS W 4 P 2 NET-PAY W 4 P 2 JOB INPUT PERSNL NAME FIRST-PROGRAM IF GROSS GE 500 DEDUCTIONS = .28 * GROSS NET-PAY = GROSSDEDUCTIONS ELSE NET-PAY = GROSS DEDUCTIONS = 0 END-IF PRINT PAY-RPT REPORT PAY-RPT LINESIZE 80 TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS
So far, we used some elementary logic, calculated some values, and created a place to store those values. There is one more thing we have to do to get those values printed on our report. We have to tell CA-Easytrieve/Plus where to print them.
This line of code prints the detail lines on the report. It tells CA-Easytrieve/Plus what fields to print and the order in which to print them. To add DEDUCTIONS and NET-PAY to the report output, all we do is make the LINE statement look like this:
LINE 01 DEPT NAME EMP# GROSS NET-PAY DEDUCTIONS
We just add the names of our two new fields in the order we want them to appear.
311
With this last change, we can run our new and improved program to generate a report. Here is the program with all the changes we made.
FILE PERSNL FB(150 1800) NAME 17 8 A EMP# 9 5 N DEPT 98 3 N GROSS 94 4 P 2 DEDUCTIONS W 4 P 2 NET-PAY W 4 P 2 JOB INPUT PERSNL NAME FIRST-PROGRAM > IF GROSS GE 500 DEDUCTIONS = .28 * GROSS NET-PAY = GROSSDEDUCTIONS ELSE NET-PAY = GROSS DEDUCTIONS = 0 END-IF
> >
>
PRINT PAY-RPT REPORT PAY-RPT LINESIZE 80 TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS NET-PAY DEDUCTIONS
And here is some sample output from the program just shown. As you can see, two new columns of information were added for NET-PAY and DEDUCTIONS:
11/18/88 DEPT 903 943 915 935 911 914 917 918 911 932 921 911 943 NAME WIMN BERG CORNING NAGLE ARNOLD MANHART TALL BRANDOW LARSON BYER HUSS POWELL MCMAHON PERSONNEL REPORT EXAMPLE-1 EMP# 12267 11473 02688 00370 01963 11602 11931 02200 11357 11467 11376 11710 04234 GROSS 373.60 759.20 146.16 554.40 445.50 344.80 492.26 804.64 283.92 396.68 360.80 243.20 386.40 NET-PAY 373.60 546.63 146.16 399.17 445.50 344.80 492.26 579.35 283.92 396.68 360.80 243.20 386.40 PAGE DEDUCTIONS .00 212.57 .00 155.23 .00 .00 .00 225.29 .00 .00 .00 .00 .00 1
312
JOB initiates program processing activities and can also provide automatic file input. IF is a conditional expression used to make decisions based on certain criteria. W designates a working storage field on the DEFINE statement. LINE determines which fields are on your report and in what order.
I I
In the next lesson, we talk a little about the statement that is responsible for initiating the printing of your report, the PRINT statement. We also describe a couple of parameters that let you edit and label your data to make it more meaningful, MASK and HEADING. For More Information If you want to add more detail to your understanding of the JOB activity section, turn to Chapter 5, Activity SectionProcessing and Logic. If you want to continue with the tutorial, continue to the next lesson.
313
Once the conditional statements are executed against a record of the PERSNL file, the PRINT statement tells CA-Easytrieve/Plus to execute the report definition statements. In the above PRINT statement example, these statements are identified by a user-supplied name, PAY-RPT. This name ties the PRINT statement to a specific report of the same name as indicated on the REPORT statement. If the report name is not included, CA-Easytrieve/Plus executes the first report in the job activity section. Once the report statements execute, control is returned to the beginning of the job activity section where the next record is processed or end-of-file processing is performed. All output routines, line counts, and page advances are handled automatically. You simply say PRINT and CA-Easytrieve/Plus does the rest.
Initially, you notice a new keyword, MASK. MASK is a parameter of the DEFINE statement and designates that an edit mask follows. In the above example, the actual edit mask consists of the characters: '$$,$$9.99'. Masks are always enclosed in single quotes.
314
The effect of adding the masks shown above on our report is as follows:
11/18/88 DEPT 903 943 915 935 911 914 917 918 911 932 921 911 943 NAME WIMN BERG CORNING NAGLE ARNOLD MANHART TALL BRANDOW LARSON BYER HUSS POWELL MCMAHON PERSONNEL REPORT EXAMPLE-1 EMP# 12267 11473 02688 00370 01963 11602 11931 02200 11357 11467 11376 11710 04234 GROSS $373.60 $759.20 $146.16 $554.40 $445.50 $344.80 $492.26 $804.64 $283.92 $396.68 $360.80 $243.20 $386.40 NET-PAY $373.60 $546.63 $146.16 $399.17 $445.50 $344.80 $492.26 $579.35 $283.92 $396.68 $360.80 $243.20 $386.40 PAGE DEDUCTIONS $212.57 $155.23 1
$225.29
Note: Any high-order zeros are suppressed and each value has one dollar sign. Any all-zero values in the DEDUCTIONS column print as blanks. The following explanations and rules apply to the edit masks in our example: 1. Each digit in a field must be designated in the edit mask. Since a four-byte packed decimal field can contain seven digits, we must designate seven digits in the mask. This is done with $$$$999. Dollar signs ($) in the edit mask indicate that a dollar sign prints before the first non-zero digit of the printed field. This is called a floating dollar sign. It means that if one or more high-order zeros are stored in the positions where a dollar sign appears in the mask, they are suppressed and replaced with a single dollar sign. For example: Mask '$$,$$9.99' Field Value 1234567 0123456 0012345 0001234 0000123 0000012 Resulting Output $12,345.67 $1,234.56 $123.45 $12.34 $1.23 $0.12 > As the number of high-order zeros increase, the dollar sign automatically floats to the right. 3. The digit 9 indicates that any value occurring in that position is printed as a digit. In the above example, all values in the ones column or to the right of the decimal are printed as digits, even zeros.
2.
315
4.
Commas and decimal points print just as indicated. In the above example, you can see that commas are suppressed with high-order zeros for numbers less than 1000. When you use the same mask on more than one field, you can avoid coding the mask more than once by naming it, and then specifying only the name on subsequent fields. Names can be any letter from A through Y. In our example, we named the mask used on the GROSS field, A. Then, we specified the letter A on the NET-PAY and DEDUCTIONS fields instead of coding the mask all over again. Remember, multiple parameters and subparameters are enclosed in parentheses.
5.
6.
To suppress all-zero values from printing (if appropriate), you simply code BWZ (blank when zero) after the mask or mask name. Because some employees in our report can have zero deductions, we included BWZ to illustrate its use.
Field Headings
So far in our example program, field (or column) headings came directly from the field names themselves. CA-Easytrieve/Plus automatically uses field names (specified on the DEFINE statement) as column headings unless column headings are described separately. One way you can describe alternative column headings is with the HEADING parameter of the DEFINE statement. For example, to replace the somewhat cryptic column heading EMP# with the more readable heading EMPLOYEE NUMBER, you can do it as follows:
NAME EMP# DEPT 17 9 98 8 5 3 A N N HEADING ('EMPLOYEE' 'NUMBER')
By placing each word in single quotes, you indicate that CA-Easytrieve/Plus should stack the heading, one word over the other.
316
The following report shows how the new heading prints, once the program is run.
11/18/88 DEPT 903 943 915 935 911 914 917 918 911 932 921 911 943 NAME WIMN BERG CORNING NAGLE ARNOLD MANHART TALL BRANDOW LARSON BYER HUSS POWELL MCMAHON PERSONNEL REPORT EXAMPLE-1 EMPLOYEE NUMBER 12267 11473 02688 00370 01963 11602 11931 02200 11357 11467 11376 11710 04234 GROSS $373.60 $759.20 $146.16 $554.40 $445.50 $344.80 $492.26 $804.64 $283.92 $396.68 $360.80 $243.20 $386.40 NET-PAY $373.60 $546.63 $146.16 $399.17 $445.50 $344.80 $492.26 $579.35 $283.92 $396.68 $360.80 $243.20 $386.40 PAGE 1
$225.29
You can include headings on the DEFINE statement for any fields you feel need better identification.
PRINT activates a report declaration resulting in a printed report. MASK lets you change the look of fields on your report. HEADING lets you customize column headings on your report.
317
In this lesson, we made some minor changes to our on-going program example. Here is a picture of how our program now looks:
FILE PERSNL FB(150 1800) NAME 17 8 A EMP# 9 5 N (HEADING ('EMPLOYEE' 'NUMBER') DEPT 98 3 N GROSS 94 4 P 2 MASK (A '$$,$$9.99') NET-PAY W 4 P 2 MASK A DEDUCTIONS W 4 P 2 MASK (A BWZ) JOB INPUT PERSNL NAME FIRST-PROGRAM IF GROSS GE 500 DEDUCTIONS = .28 * GROSS NET-PAY = GROSSDEDUCTIONS ELSE NET-PAY = GROSS DEDUCTIONS = 0 END-IF PRINT PAY-RPT REPORT PAY-RPT LINESIZE 80 TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS NET-PAY DEDUCTIONS
For More Information If you want to learn more about the PRINT statement, you can turn now to Chapter 6, Activity Section-Input and Output. To continue the tutorial and learn about report declarations, continue to the next lesson.
In this lesson, we describe these three statements and add the following four statements to our program:
I I I I
318
REPORT Statement
The REPORT statement must be the first statement in your report declaration. It tells CA-Easytrieve/Plus that a report is about to be described and also identifies the type of report and its various physical characteristics. In our sample program, we identify the report by name (PAY-RPT) and also specify a LINESIZE of 80; both of these are optional. Since our program has only one report, we could leave the report name off of both the PRINT and the REPORT statements. A linesize of 80 restricts report output to 80 characters per printed line. If you type programs in as we move along and review output at your terminal, then 80 characters per line is appropriate (since you can only get 80 characters on your screen).
A clever CA-Easytrieve/Plus user came up with a useful mnemonic device for remembering these statements and their order:
Sisters E Q U E N C E Can O N T R O L Sometimes U M Tell I T L E Horrible E A D I N G Lies I N E
Though it sounds silly, it is effective. All of these statements are described briefly on the remaining pages of this lesson.
319
SEQUENCE Statement
The SEQUENCE statement sorts your report on a specified key in ascending or descending order. Let us sequence our current report example on department in ascending order. That is, let us tell CA-Easytrieve/Plus to print out all of our employees in order by department number, starting with the lowest department number. (The department number is in the field called DEPT.) All we have to do is place the SEQUENCE statement and the field name DEPT right after the REPORT statement:
REPORT PAY-RPT LINESIZE 80 > SEQUENCE DEPT TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS NET-PAY DEDUCTIONS
Ascending order is the default for the SEQUENCE statement. For descending order, you just put a D after the field name separated by a space. When we run our program, here is what we get:
11/18/88 DEPT 901 903 912 914 914 914 914 914 915 917 918 918 919 920 NAME WALTERS WIMN LOYAL MANHART VETTER GRECO CROCI RYAN CORNING TALL BRANDOW EPERT DENNING MILLER PERSONNEL REPORT EXAMPLE-1 EMPLOYEE NUMBER 11211 12267 04225 11602 01895 07231 08262 10961 02688 11931 02200 07781 02765 05914 GROSS $424.00 $373.60 $295.20 $344.80 $279.36 $1,004.00 $376.00 $399.20 $146.16 $492.26 $804.64 $310.40 $135.85 $313.60 NET-PAY $424.00 $373.60 $295.20 $344.80 $279.36 $722.88 $376.00 $399.20 $146.16 $492.26 $579.35 $310.40 $135.85 $313.60 PAGE 1
DEDUCTIONS
$281.12
$225.29
Note: The records are now in order by department number. When you use SEQUENCE, you do not need to define any extra files or additional input/output commands in your program; CA-Easytrieve/Plus takes care of that for you.
320
CONTROL Statement
The CONTROL statement creates a control break on a specified field (called the control field). It automatically totals all quantitative fields (fields with decimal positions) at the time of the control break and grand totals at the end of the report. Now that we sequenced our report by the DEPT field, we can also request a control break on the same field. This gives us totals of GROSS, NET-PAY, and DEDUCTIONS for each department. All we need to do is add the CONTROL statement and the field name DEPT right after the SEQUENCE statement:
REPORT PAY-RPT LINESIZE 80 SEQUENCE DEPT > CONTROL DEPT TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS
Now, at the end of each department (and end-of-report), we get our totals as shown below:
11/18/88 DEPT 901 901 903 903 912 912 914 NAME WALTERS WIMN PERSONNEL REPORT EXAMPLE-1 EMPLOYEE NUMBER 11211 12267 GROSS $424.00 $424.00 $373.60 $373.60 $295.20 $295.20 $344.80 $279.36 $1,004.00 $376.00 $399.20 $2,403.36 $3,496.16 NET-PAY $424.00 $424.00 $373.60 $373.60 $295.20 $295.20 $344.80 $279.36 $722.88 $376.00 $399.20 $2,122.24 $3,215.04 PAGE 1
DEDUCTIONS
$281.12 $281.12
914
321
SUM Statement
Let us say that you decided you do not want totals for all three fields GROSS, NET-PAY, and DEDUCTIONS at each control break. All you really need is a total for GROSS so you can get an idea of what the salary expense is. You can override the CONTROL statement (which normally totals all quantitative fields) with the SUM statement. The SUM statement specifies the quantitative fields you want totaled on a control break. When used, any fields not specified on the SUM statement are not totaled. Let us change our program so that it totals only the gross pay.
REPORT PAY-RPT LINESIZE 80 SEQUENCE DEPT CONTROL DEPT > SUM GROSS TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS NET-PAY DEDUCTIONS
DEDUCTIONS
$281.12
914
TITLE Statement
The TITLE statement gives us the title of our report. We were calling our report 'PERSONNEL REPORT EXAMPLE-1' all the way through the tutorial:
REPORT PAY-RPT LINESIZE 80 SEQUENCE DEPT CONTROL DEPT SUM GROSS > TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS NET-PAY DEDUCTIONS
322
You can change this to any title you think appropriate. All you must do is include the word TITLE, followed by a title number, followed by your title in single quotes. You can omit the title number when you have only one title; it simply defaults to 01. When you have more than one title (and TITLE statement), you must number them in ascending order. You saw what this statement does on our example report, but we show you again in case you forgot. The TITLE statement, shown above, is responsible for the title shown on the following report:
11/02/88 DEPT 901 901 903 903 NAME WALTERS WIMN PERSONNEL REPORT EXAMPLE-1 EMPLOYEE NUMBER 11211 12267 GROSS $424.00 $424.00 $373.60 $373.60 NET-PAY $424.00 $373.60 PAGE DEDUCTIONS 1
The system date and the page number automatically print on the same line. We show you how to override this in Chapter 7, Activity Section-Reporting.
HEADING Statement
The HEADING statement, like the HEADING parameter of the DEFINE statement (described in lesson 3), prints user-defined column headings for specified fields. (It overrides the HEADING parameter of the DEFINE statement if one already exists for the field you are describing.) We can show you how this statement works by adding it to our program. Let us say we decided that the field name, NAME is not really a good column heading since what we really mean is EMPLOYEE NAME. Much like we did with the EMP# field, we can change our existing column heading. All we do is type the word HEADING followed by the field name NAME, followed by the new column heading:
REPORT PAY-RPT LINESIZE 80 SEQUENCE DEPT CONTROL DEPT SUM GROSS TITLE 01 'PERSONNEL REPORT EXAMPLE-1' > HEADING NAME ('EMPLOYEE' 'NAME') LINE 01 DEPT NAME EMP# GROSS NET-PAY DEDUCTIONS
To be consistent with our other heading, EMPLOYEE NUMBER, we described our new heading so that it stacks EMPLOYEE on top of NAME. This is done by putting single quotes around each word in the heading. The parentheses are required because the two words, each in quotes, are treated the same as any other multiple parameters.
323
$281.12
914
LINE Statement
The last report definition statement is one you have seen, with TITLE, since the beginning of this chapter. We described it briefly in Lesson 2. The LINE statement defines the contents of a printed line (detail line) in your report. In our example program, it defines which fields we want printed on a line and the order in which we want them printed:
REPORT PAY-RPT LINESIZE 80 SEQUENCE DEPT CONTROL DEPT SUM GROSS TITLE 01 'PERSONNEL REPORT EXAMPLE-1' HEADING NAME ('EMPLOYEE' 'NAME') > LINE DEPT NAME EMP# GROSS NET-PAY DEDUCTIONS
The LINE statement is the only report definition statement you are required to include in your report declaration. Without it, CA-Easytrieve/Plus has no idea what detail information you want printed on your report or the order in which you want it printed.
324
REPORT designates the beginning of a report declaration and can specify the type of report and report characteristics. SEQUENCE puts your report in alphabetical or numerical order, based on the contents of a field or fields. CONTROL causes a control break, based on the contents of a field. It prints control totals and grand totals for all quantitative fields. SUM overrides control totals and totals only specified fields. TITLE prints major report titles. HEADING prints customized column headings. LINE tells CA-Easytrieve/Plus what fields to put on detail lines and in what order.
I I I I
For More Information If you want to add more detail to your understanding of CA-Easytrieve/Plus report declarations, turn to Chapter 7, Activity SectionReporting. The next two lessons in this tutorial introduce you to CA-Easytrieve/Plus macros and diagnostics. To go on to Lesson 5, continue below.
325
To substitute a macro for the CA-Easytrieve/Plus field definition statements in our sample program (assuming we named the macro PERSNL and stored it somewhere on the system), we just replace them with the statement %PERSNL:
FILE PERSNL FB(150 1800) %PERSNL NET-PAY DEDUCTIONS W W 4 4 P P 2 2 MASK A MASK (A BWZ) } } } macro invocation
JOB INPUT PERSNL NAME FIRST-PROGRAM IF GROSS GE 500 DEDUCTIONS = .28 * GROSS NET-PAY = GROSSDEDUCTIONS ELSE NET-PAY = GROSS DEDUCTIONS = 0 END-IF PRINT PAY-RPT REPORT PAY-RPT LINESIZE 80 SEQUENCE DEPT CONTROL DEPT SUM GROSS TITLE 01 'PERSONNEL REPORT EXAMPLE-1' HEADING NAME ('EMPLOYEE' 'NAME') LINE DEPT NAME EMP# GROSS NET-PAY DEDUCTIONS
For More Information For more detailed information on invoking macros, turn Chapter 8, Macros. Otherwise, continue with Lesson 6.
326
The mistake we made in this program (on line 18 of the listing) is that we mistyped the field name DEPT. We left off the T. The error message we received looks like this:
******* B082 NAME IS UNDEFINEDDEP
CA-Easytrieve/Plus is telling us that it does not know what a DEP is. This message consists of a message ID, a diagnostic message, and a supplemental message that identifies the mistyped field name (DEP). Supplemental Message DEP
Message ID *******B082
327
Summing Things Up
To correct your error, you just retype the misspelled field name in your program. You can, of course, come across other error messages, all of which can be easily looked up in Appendix A of the CA-Easytrieve/Plus Reference Guide. There, you can find complete descriptions of all CA-Easytrieve/Plus diagnostic messages.
Summing Things Up
In this tutorial, you followed the development of a moderately complex CA-Easytrieve/Plus report program. We started with a very simple report and built on it until we used all of the CA-Easytrieve/Plus basic report writing features. You should now have a good understanding of the CA-Easytrieve/Plus program structure and how to use most of the basic report writing tools CA-Easytrieve/Plus has to offer. There are many parameters of various statements we chose not to illustrate in the tutorial. Our goal was to get you through the basic report writing process. The other parameters and statements are covered in other portions of this document or in the CA-Easytrieve/Plus Reference Guide. For More Information If you want more information on CA-Easytrieve/Plus diagnostics, turn to Chapter 9, Programming Techniques. Or, read any first level readings you skipped. Or, start the second reading in Chapter 4, Library Section-Describing and Defining Data.
328
Chapter
Introduction
Describing and defining data is an essential part of creating CA-Easytrieve/Plus programs that use input or output files. CA-Easytrieve/Plus must know how data is stored before processing can occur. Data definition is accomplished through the FILE and DEFINE statements. Before taking you into deeper descriptions of specific CA-Easytrieve/Plus statements, this chapter illustrates some general rules of syntax use. In this chapter, you find:
Reading 1
I I I I
CA-Easytrieve/Plus general syntax rules Describing files with the FILE and DEFINE statements Editing fields and adding headings Defining working storage fields (type W)
Reading 2
I I I I I
Defining working storage fields (type S) Initializing working storage fields with the VALUE clause Redefining fields Defining fields with a relative start location Redefining fields using relative start locations
Reading 3
I I I
Using advanced FILE statement parameters including VFM Copying field definitions with the COPY statement Using the EXIT parameter.
41
Syntax Rules
Syntax Rules
Before we get started, we want to mention some of the general rules concerning CA-Easytrieve/Plus syntax. The free-form English language structure of CA-Easytrieve/Plus makes it easy for you to develop an efficient, flexible programming style. To avoid programming errors, follow the simple syntax rules.
Statement Area
All CA-Easytrieve/Plus source statements are records of 80 characters each. The default statement area is in columns 1 through 72. This means you can place your CA-Easytrieve/Plus code anywhere in columns 1 through 72. You can indent or align certain statements for readability, but it is not required.
Multiple Statements
The statement area normally contains a single statement. However, you can enter multiple statements on a single line. A period followed by a space indicates the end of a statement. The next CA-Easytrieve/Plus statement can start at the next available position of the statement area (after the space). For example, the following two CA-Easytrieve/Plus statements are on one line:
COST = FIXED + VARIABLE. PRICE = COST + PROFIT
Comments
When the first nonblank character of a statement is an asterisk (*), the remainder of that line is considered to be a comment. Note: The CA-Easytrieve/Plus compiler ignores it. You can use comment statements at any place in a program, except in a continued statement. CA-Easytrieve/Plus treats a statement containing all blanks as a comment.
42
Syntax Rules
Continuations
The last nonblank character of a statement terminates the statement unless that character is a hyphen (-) or a plus sign (+).
I
A hyphen indicates that the statement continues at the start of the next statement area. A plus sign indicates that the statement continues with the first nonblank character in the next statement area.
The difference between minus and plus is important only when continuing a line in the middle of a word. Continuation of a line between words is the same for both. The following continued statements produce identical results:
FIELD-NAME DEF' FIELD-NAME W 6 VALUE W 6 VALUE A + 'ABCA + 'ABC+ DEF'
43
Syntax Rules
At least one space must follow all delimiters, except for the left parenthesis and colon. The word RECORD-COUNT is shown below with various delimiters:
RECORD-COUNT FILEONE:RECORD-COUNT (RECORD-COUNT) 'RECORD-COUNT' RECORD-COUNT, RECORD-COUNT.
Keywords
Keywords are words that have specific meaning to CA-Easytrieve/Plus. Some keywords are reserved words. You can use nonreserved keywords in the appropriate context as field names whereas you cannot use reserved words as field names. See the CA-Easytrieve/Plus Reference Guide for a list of all reserved keywords.
Multiple Parameters
You must enclose multiple parameters in parentheses to indicate group relationships. The following example is an CA-Easytrieve/Plus statement with multiple parameters:
MASK (A BWZ '$$,$$9.99')
Field Names
Field names are composed of a combination of not more than 40 characters chosen from the following:
I I I
Alphabetic characters, A through Z, lowercase and uppercase Decimal digits 0 through 9 All special characters, except delimiters.
The first character of a field name must be an alphabetic character or a decimal digit. Also, a field name must contain at least one alphabetic or special character to distinguish the field name from a number. All working storage field names and all field names in a single file must be unique. If you use the same field name in more than one file, or in a file and in working storage, you must qualify the field name with the file name or the word WORK. A qualified field name consists of the qualifying word followed by a colon and the field name. You can use any number of spaces, or no spaces, to separate the colon from either the qualifying word or the field name.
44
Syntax Rules
You can qualify the field name RECORD-COUNT in the following ways:
FILEA: RECORD-COUNT FILEA:RECORD-COUNT WORK : RECORD-COUNT WORK:RECORD-COUNT
Labels
Labels identify specific JOBs, PROCedures, REPORTs, and statements. Labels can be 40 characters long, can contain any character other than a delimiter, and can begin with A-Z or 0-9. They cannot consist of all numeric characters.
Alphabetic Literals
Alphabetic literals are words that are meant to be taken literally. They are enclosed in apostrophes, and can be 254 characters long. They can only contain EBCDIC characters. Whenever an alphabetic literal contains an embedded apostrophe, you must code two apostrophes. For example, code the literal O'KELLY as:
'O''KELLY'
Numeric Literals
Numeric literals can contain 18 numeric digits (EBCDIC characters 0 to 9). You can indicate the algebraic sign of a numeric literal by attaching a plus (+) or a minus (-) prefix to the numeral. Also, you can use a single decimal point to indicate a maximum precision up to 18 decimal positions. The following examples are valid numeric literals:
123 +123 -123.4321
Hexadecimal Literals
Hexadecimal literals are words used to code EBCDIC values that contain characters not available on standard data entry keyboards. Prefix an EBCDIC hexadecimal literal with the letter X and an apostrophe (X'), and terminate it with an apostrophe. CA-Easytrieve/Plus compresses each pair of digits that you code in the apostrophes into one character. CA-Easytrieve/Plus permits only the EBCDIC digits 0 to 9 and the letters A to F. The following hexadecimal literal defines two bytes of binary zeroes:
X'0000'
45
Identifiers
Identifiers are words that name things, such as field name, and statement labels in CA-Easytrieve/Plus. Identifiers cannot contain these delimiters.
, ' ( ) : comma apostrophe left parenthesis right parenthesis colon
Arithmetic Operators
CA-Easytrieve/Plus arithmetic expressions (see Chapter 5, Activity Section Processing and Logic) use the following arithmetic operators:
* / + multiplication division addition subtraction
Defining Data
Normally, you define data fields in the chapter of your program called the library. The library defines the data in terms of fields, records, and files. A typical file layout is shown below:
RECORD { Jones, John J. Hammond, Martha Gray, Frederick ADDRESS FIELD ---------------------------16822 Evergreen Chicago ... 422 Ash 16 Apple Ave. St. St. Evanston .. Lockport .. Peotone .. } } } } } } } } } } } } } } } }
F I L E
46
Defining File Attributes The FILE statement describes a file or a database. Defining Field Data Fields are defined in the library following the FILE statement or later in the job activity by using the DEFINE statement. You can define two categories of data:
I I
File data (fields defined in a record). Working storage data (fields defined in working storage).
FILE Statement
The FILE statement describes the files you are using as input to your program and any files your program creates (output) other than reports. You code the FILE statements at the beginning of the library section. The general structure of the FILE statement is:
FILE file-name [file attributes]
FILE
FILE is the keyword that designates that a file name and description follow. File-name and file attributes describe the file you are using and are normally supplied by your data processing department.
file-name
File-name is a one-to eight-character name (one-to seven in VSE) that defines your file to CA-Easytrieve/Plus. All input/output statements that operate on the file refer to this name. File-name is also used on your JCL, CLIST, or EXEC statements to reference the file. Every FILE statement must have a file-name immediately following the FILE keyword and it must be unique in your program.
file attributes
The CA-Easytrieve/Plus FILE statement has a host of parameters that describe file attributes. File attributes are as varied as the methods and environments available for storing data. Most of them are beyond the scope of this guide. In general, they include parameters for describing file type, storage device type, and record format. They are all optional, depending on your particular operating environment. See the CA-Easytrieve/Plus Reference Guide or Pocket Reference for the complete FILE statement syntax.
47
DEFINE Statement
The DEFINE statement specifies data fields in a record, on a file, or in working storage.
I
Four parameters are always required: field-name, start-location, field-length, and data-type. Additional parameters include the number of decimal positions for quantitative fields, HEADING, and MASK.
[RESET]
field-name
You create your own field-names or use already existing field names (provided to you in a record layout).
I I I
Field-names must be unique in a file. The name can be 1-to 40-alphanumeric characters. You can use special characters, such as dollar sign and hyphen, but not delimiters.
start-location
The start-location is the beginning location of a field in a record relative to the first position (position 1) of the record. Start-location can be explicitly defined based on its distance from position 1 of the record:
NAME ADDRESS PAY-NET 17 37 90 starts in position 17 starts in position 37 starts in position 90
Here is an example of where the NAME field appears in the record just described.
NAME field ---------------| | | | | | | | | | | | | | | | |X|X|X|X|X|X|X|X| . . . --------------------------------------------------------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 . . .
48
field-length
You specify the length of a field in bytes (characters and spaces). The length of the NAME field in the above example is eight characters.
NAME 17 8
data-type
You describe the type of data a field contains by coding the letter abbreviation for that type after the field-length. There are five data-types. Type A Alphanumeric N Numeric P Packed U Unsign Packed B Binary Maximum Field Length (in bytes) 32,767 18 10 9 4
The data type of the NAME field (which can contain only alphabetic characters) is A for alphanumeric.
NAME 17 8 A
decimal-positions
Identify a field to CA-Easytrieve/Plus as quantitative, that is, a field that contains a quantity as opposed to a numeric identifier or code. Identify the field to be automatically totaled when specified in a CONTROL report. Enable proper placement of commas and decimals with leading (high-order) zeros suppressed when the field is printed.
Specify the decimal-positions by coding an integer (0 through 18) after the data-type. For example, the following is a five-byte numeric field with two decimal positions:
AMOUNT 40 5 N 2
49
HEADING Parameter You use the HEADING parameter to specify an alternative column heading for a field. (The default column heading is the field-name.) The column heading you specify is automatically used on report output unless overridden by a HEADING statement in the activity section. Place the alternate column heading in single quotation marks. For example,
CL-NAME 5 20 A HEADING 'CLIENT NAME'
To stack a column heading so that each word appears on top of each other, place each word in single quotes. You now must enclose the words in parentheses. For example,
CL-NAME S 20 A HEADING ('CLIENT' 'NAME')
MASK Parameter The MASK parameter creates a customized edit mask. An edit mask is an optional pattern of characters specifying how non-alphanumeric data prints. (You cannot edit alphanumeric fields.) An edit mask is created using combinations of the following characters: Character 9 Z * $ Description Formats digits. Suppresses leading zeros. Replaces leading zeros with an asterisk. Prints a minus sign before the first nonzero digit of a negative number. Prints a currency symbol before the first nonzero digit.
Each digit in the field must be designated by a character in the mask. For example:
Edit Mask $$,$$9 $$,$$9 Field Value 01234 93142 Result $1,234 $93,142
410
You can include commas in the edit mask for clarity. They are printed in whatever location you indicate in the mask, but are suppressed if the field value does not exceed the number of places to the right of the comma. Defining Edit Masks Some standard edit masks you can use in your programs are shown here: EDIT MASK '(999)999-9999' '999-99-9999' 'Z9/99/99 '$$,$$$,$$9.99 CREDIT' '*,***,***,999.99-' '-,---,--9.99' USED FOR: Telephone number Social Security number Date Money (with floating $) Protected check amount Negative number
{[mask-name]
[BWZ]
['edit-mask']}]
MASK is the CA-Easytrieve/Plus keyword, indicating an edit mask follows. The mask-name names the edit mask that follows it. If you name a mask, you can reuse it on other field definitions just by specifying the name. A name can be any single letter from A through Y. This means that once you define a mask, you do not have to define it again to use it again. BWZ (blank when zero) specifies that a field should not print if the entire field contains zeros. Just code the letters BWZ whenever you want to suppress an all zero field. BWZ is not carried over to other fields when using a mask-name. The 'edit-mask' is the actual format of the mask. It must be enclosed in single quotes and include one edit character for each digit in the field being described.
411
Given a numeric field with the contents 012345678, the following masks produce the results shown. MASK '999-99-9999' 'Z99,999,999' 'ZZZ,ZZZ,999' '$$$,$$$,999' '***,***,999'
Masking Negative Values
You can mask fields that have the potential for containing a negative value in such a way that an indicator of their negativity displays when printed. An indicator of negativity, such as minus sign (-) or the letters CR (for credit), or any other chosen indicator, only print when the field contains a negative value. To do this, you mask the field as you would normally, making sure all digits are accounted for, then you add the indicator to the right end of the mask. Given a numeric field with the contents -012345678, the following masks produce the results shown. MASK '$$$,$$$,999 CREDIT' '$$$,$$$,999-' 'Z99,999,999-' RESULT $12,345,678 CREDIT $12,345,67812,345,678-
The indicators shown above, CREDIT and -, print only when the field contains a negative value. Default Edit Masks Fields that are defined with positions to the right of a decimal point are known as quantitative. These fields have system default edit masks that account for the automatic printing of commas and decimal points in printed totals. Numeric fields without defined decimal positions print without commas or decimal points and are not automatically totaled on control reports.
412
Assuming a field named PAY has a value of 1000, the following table gives the corresponding default edit masks and results for some possible field definitions: Field Definition PAY 10 5 N 0 PAY 10 5 N 2 PAY 10 5 N Default Mask 'ZZ,ZZZ-' 'ZZZ.99-' '99999' Result 1,000 10.00 01000
Note: The number of decimal positions can be zero (0). Defining Working Storage Working storage gives you a method for setting aside a temporary area of storage in the computer memory; a place to keep the results of calculations or other information that is created while a CA-Easytrieve/Plus program runs. Define working storage by specifying W as the start-location. For example, the following defines a numeric working storage field four characters long with two decimal positions.
WORK-DEDUCT W 4 N 2
This field could be defined in the library section or in an activity before being referenced. DEFINE within an Activity You usually specify file fields and working storage fields in your CA-Easytrieve/Plus library section, but you can also define them in an activity. Compare the two examples below. The first shows DEFINE statements in the library section, the second shows DEFINE statements in an activity section. Remember, the keyword DEFINE is optional when defining fields in the library section.
413
The following example shows fields defined in the library section of a program. (The keyword DEFINE is shown, but is optional.) There are no fields defined in the activity section.
Library ... { { { { { { { { { { { FILE PERSNL FB(150 1800) DEFINE EMP# 9 DEFINE NAME 17 DEFINE EMP-COUNT W * 5 20 4 N A N
Activities ...
JOB INPUT PERSNL NAME MYPROG EMP-COUNT = EMP-COUNT + 1 PRINT REPORT1 * REPORT REPORT1 LINE EMP# NAME EMP-COUNT
In contrast to the previous example, this example shows fields defined in the activity section of a program. (The DEFINE keyword is required.)
Library ... { { { { { { { { { { FILE PERSNL FB(150 1800) SALARY-CODE 134 * JOB INPUT PERSNL NAME MYPROG DEFINE EMP# 9 DEFINE NAME 17 PRINT REPORT1 * REPORT REPORT1 LINE EMP# NAME SALARY-CODE 2 N
Activities ...
5 N 20 A
When fields are defined in an activity, each field definition must start with the DEFINE keyword and be physically defined before the field is referenced.
414
Static working storage fields are necessary because of the way CA-Easytrieve/Plus processes reports. In the first reading of Chapter 5, Activity Section-Input and Output, we describe the PRINT statement and the process that occurs when reports are sequenced (through the SEQUENCE statement) or are multiple in one JOB activity (more than one REPORT statement is used). In both cases, CA-Easytrieve/Plus outputs data to an intermediary file called a work file or spool file. (See the examples in Chapter 6.) Work files do not get formatted into reports (through report definition statements) until they are first sequenced or until the system printer becomes available. It is due to the use of intermediary work files that a need for two different types of working storage fields arises. To understand the need for these two field types and the differences between them, the following description provides a contrast that sheds light on the use of both.
Static Versus Non-Static
Unlike static working storage fields (type S), non-static working storage fields (type W) are output to work files for every record in the input file. This is done whenever the non-static working storage field is referenced in a REPORT subactivity. If such a field accumulates values during the processing of an entire file, its value, at the time each record is output to the work file, appears on the record in the work file. If the file is then sequenced, the non-static working storage fields are sequenced with the rest of the fields on the record. This means that accumulated results do not appear, either internally or when printed (if printed), in the order they were accumulated.
415
Therefore, any calculations based on the value of a non-static working storage field performed at the time of report formatting are likely to produce results that are in error. This is only true for non-static working storage fields (type W) that accumulate values for sequenced reports. For example:
Work File Before SEQUENCE
SEQUENCE KEY FIELD W-TYPE ACCUMULATO R FIELD
1 2 3 4 5 6 7
3 2 7 4 5 6 1
In the above example, the W-type field increments by one (1) each time a record is processed. Once the work file is sequenced and the report is formatted, the value contained in the W-type field when last processed (output to the report) is now different than it was before sequencing. If you tried to compute averages based on this value, your results would be in error. Static working storage fields are not output to work files. This means they are not affected by sequencing. The last value accumulated into an S-type field remains unchanged, regardless of what is done to the work file and is, therefore, suitable for any end-of-report calculations such as averaging. For example:
Report File Before SEQUENCE
SEQUENCE KEY FIELD S-TYPE ACCUMULATO R FIELD
1 2 3 4 5 6 7
416
The above example illustrates the fact that static working storage fields are not copied to work files and, therefore, are not sequenced as are non-static (type W) fields. The static field, shown above, contains the value seven (7) at the time any averaging is performed at end-of-report. Initializing Working Storage Fields To give working storage fields an initial value at the beginning of your program, use the VALUE option of the DEFINE statement. For example, the VALUE parameter below assigns an initial value of JANUARY to the alphanumeric working storage field CURR-MON.
CURR-MON W 10 A VALUE 'JANUARY'
When the value clause is not used, numeric working storage fields are automatically initialized to zeros and alphanumeric working storage fields to blanks.
RESET Option
The RESET option is used only for W working storage fields. When coded on the field definition for a W field, RESET returns the field to its initial value whenever JOB or SORT executes. You cannot use RESET for redefine fields (fields having overlay redefinition). Redefining a Field Sometimes it is necessary to break a field into several parts to get the exact information you want. A birth date, for example, could have been originally entered as one field in a record. Now, you want to access this information by either the month, day, or year.
Explicit Redefinition
With CA-Easytrieve/Plus, you can explicitly redefine the field in the following manner:
DATE-OF-BIRTH MONTH DAY YEAR 103 103 2 105 2 107 2 6 N N N N
417
In this example, the MONTH (02) starts in position 103 and occupies positions 103 and 104. The DAY starts in 105 and occupies positions 105 and 106. Finally, YEAR starts in 107 and occupies 107 and 108.
Overlay Redefinition
You can perform overlay redefinition of a field by including the original field-name as the starting location for all subsequent fields in the redefinition. This is especially useful when redefining a working storage field that does not have a numeric starting position. For example:
DATE-OF-BIRTH MONTH DAY YEAR DATE-OF-BIRTH DATE-OF-BIRTH DATE-OF-BIRTH W +2 +4 6 2 2 2 N N N N
The starting position of the redefining field is designated by using the original field name plus any offset (+2 or +4 in the above example). When using overlay redefinition, make sure that the redefining fields fits in the storage boundaries of the redefined field. Implicit Start-location You can define the start-location of a field with an implicitly defined position in the record. Implicitly defining a start-location eliminates the need to identify the actual start-location of a field. Implicit start-locations are most useful when you are creating output files, since output files generally have contiguous field locations.
418
Use an asterisk in place of the numeric start-location when implicitly defining a field. The asterisk implies that the field begins in the next available starting position (highest location defined so far, plus one). For example, the following defines contiguous fields in a record.
EMP# NAME FILLER1 ADDRESS 1 * * * 5 16 10 39 N A N A
Since EMP# begins in position 1, then NAME begins in position 6, FILLER1 in position 22, and ADDRESS in position 32. All locations between 1 and 70 are accounted for. END OF SECOND READING Please continue with Chapter 5, Activity Section-Processing and Logic. YOU ARE NOW STARTING THE THIRD READING OF CHAPTER 4
VFM provides an easy method for establishing temporary work files without special job control or file allocation statements. By using VFM, you can establish your own extract or temporary files using only CA-Easytrieve/Plus keywords. The FILE keyword and a user defined file name are required.
VIRTUAL
The VIRTUAL parameter designates that the named file is a temporary VFM file. VFM files consist of a dynamically allocated space in memory (64K default). If the allocated space is exhausted, VFM automatically writes the excess data to a single spill area on disk.
419
RETAIN
The RETAIN parameter specifies that the VFM file remains in memory until the end of the associated CA-Easytrieve/Plus execution. If RETAIN is not specified, the VFM file is deleted once it is read back into your program. Record Length and Type CA-Easytrieve/Plus requires that you specify a record length for all output files. When specifying record length, you must also specify record type (F, V, or U). Blocksize is not required since VFM files are automatically blocked.
EXIT Parameter
The EXIT parameter on the FILE statement invokes a user routine for every input or output operation performed on the named file. You can use EXIT to access your own user-written routine to convert nonstandard data files CA-Easytrieve/Plus does not process directly. EXIT is not valid for VFM, IMS/DLI, or CA-IDMS. Always used on the FILE statement, it has this structure:
FILE file-name [EXIT (program-name [NR] + } ] }... ) ] } ] } ] [MODIFY] )] [ { [USING ({ field-name [ { 'literal' [ {
The EXIT parameter followed by program-name indicates the routine or subprogram to execute.
NR
USING specifies any parameters passed to the exit routine. It is limited to working storage fields, system-defined fields, and card literals.
MODIFY
MODIFY specifies that CA-Easytrieve/Plus provides input or output services, yet EXIT can inspect and modify each record after input and before output.
420
COPY Statement
The COPY statement duplicates the field definitions of a named file. You can copy the field definitions of a given file an unlimited number of times. The COPY statement looks like this:
COPY file-name
If you copy the same field name into more than one file and the files are used in the same activity, you must qualify the field when referencing it in your programs or CA-Easytrieve/Plus cannot uniquely identify the data reference. You can qualify fields in CA-Easytrieve/Plus by preceding them with their file name and a colon. For example, OUTFILE:NAME.
Example of COPY Statement
FILE PERSNL FB(150 1800) NAME 17 20 A HEADING ('EMPLOYEE NAME') NAME-LAST NAME 8 A HEADING ('FIRST' 'NAME') NAME-FIRST NAME +8 12 A HEADING ('LAST' 'NAME') FILE SORTWRK FB(150 1800) VIRTUAL COPY PERSNL SORT PERSNL TO SORTWRK USING + (NAME-LAST NAME-FIRST) NAME MYSORT JOB INPUT SORTWRK NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINE NAME-FIRST NAME-LAST
END OF THIRD READING Please continue with Chapter 5, Activity Section-Processing and Logic.
421
Chapter
Introduction
The activity section of a CA-Easytrieve/Plus program is where all processing logic and report declarations reside. You might say it is where the action is. The activity section can contain two types of activity:
I I
SORT activities are signified by the SORT statement and JOB activities by the JOB statement. In this chapter, you find:
Reading 1
I I I I
CA-Easytrieve/Plus JOB statement Processing with conditional expressions Combined conditions Arithmetic calculations
Reading 2
I I I I I
Assigning values to variables Rounding values Moving data Processing with loops and branches including GOTO and DO WHILE STOP statement
Reading 3
I I I
Sorting data and the SORT statement Processing with procedures including START and FINISH procedures Processing tables.
51
JOB Activities
JOB Activities
JOB Statement
The JOB statement defines and initiates processing activity. Also, it identifies the name of the automatic input file. In its basic form, it appears like this:
JOB [INPUT file-name] [NAME job-name]
The optional INPUT parameter identifies the automatic input to the activity. This means that CA-Easytrieve/Plus controls all input related logic, such as opening the file, checking for end of file, and reading. When you do not specify INPUT, CA-Easytrieve/Plus automatically provides an input file. If a SORT activity immediately preceded the current JOB activity, the default input is the output file from that SORT activity. Otherwise, the default input is the first file named in the library section.
file-name
File-name identifies the automatic input files. It can identify any file defined in the library section of the program eligible for sequential input processing.
NAME job-name
The optional NAME parameter names the JOB activity and is used only for documentation purposes. The job-name can be up to 40 characters long, can contain any character other than a delimiter, and begin with A-Z or 0-9. It cannot consist of all numeric characters. This example shows the location of the JOB statement and the subactivities in a CA-Easytrieve/Plus program.
** Library ** * ACTIVITY> JOB INPUT PERSNL NAME EXAMPLE LOGIC > IF DEPARTMENT = 911 THRU 914 921 DEDUCTIONS = GROSS - NET PRINT EXAMPLE END-IF * REPORT> REPORT EXAMPLE SEQUENCE DEPARTMENT NAME TITLE 1 'EXAMPLE REPORT' LINE 1 NAME DEPARTMENT EMP# GROSS NET DEDUCTIONS
You can use the logic subactivity to examine and manipulate data, initiate printed reports, and write data to a file.
52
JOB Activities
You can use the report subactivity to format the appropriate report.
Conditional Expressions
Data selection and manipulation takes place in the logic section of a CA-Easytrieve/Plus program. Logic is coded immediately after the JOB statement. IF Statement Processing in a JOB activity can depend on the conditional (IF) statements present in the program.
I
When an IF statement is present, records read from the input file are processed according to the conditions it states. Every IF statement must end with END-IF.
[statements executed for true IF condition] [ELSE] [statements executed for false IF condition] END-IF
IF Statement Examples
I
53
JOB Activities
Arithmetic Operators
CA-Easytrieve/Plus permits the following arithmetic operators in conditional statements: Operators EQ = NE = GT > GE >= LT < LE <= Meaning Equal to Not equal to Greater than Greater than or equal to Less than Less than or equal to
IF/ELSE ELSE directs CA-Easytrieve/Plus to perform alternative processing when the condition established by the IF statement is not met.
I
For true IFs, all commands up to the ELSE (or END-IF if no ELSE is present) are executed. For false IFs, commands between ELSE and END-IF are executed. Following END-IF, processing continues regardless of the result of the IF.
I I
IF/ELSE Example
IF DIVISION = 'A' THRU 'L' DEDUCTIONS = GROSS * .15 ELSE DEDUCTIONS = GROSS * .18 END-IF
In the above example, records with a DIVISION field containing values in the A through L range are processed according to the statement between the IF and ELSE statements (DEDUCTIONS = GROSS * .15). For records with DIVISION not in the range A through L, the statement following ELSE (DEDUCTIONS = GROSS * .18) is executed. END-IF signifies the end of the condition. In words, we could restate the condition in the above example something like this, "For divisions A through L, deductions are equal to 15 percent of the gross; for all other divisions, deductions are equal to 18 percent of the gross."
54
JOB Activities
Special IF Statements Use special IF statements to check the integrity of the data in your files. A special IF statement has the following format:
{ { { { { { { ALPHABETIC NUMERIC SPACE SPACES ZERO ZEROS ZEROES } } } } } } }
IF
field-name [NOT]
Special IF statement keywords check for the following conditions: Keyword ALPHABETIC NUMERIC SPACE SPACES ZERO ZEROS ZEROES
Special IF Examples
Condition Value containing characters A through Z and blank spaces. Value containing digits 0 through 9. Value containing all blank spaces. Value containing all zeros (0)
This statement is true IF AMT NOT NUMERIC IF NAME SPACES IF STATE ALPHABETIC IF AMT-DUE ZERO
for this condition AMT does not contain all digits NAME contains all spaces STATE contains all letters and spaces AMT-DUE contains all zeros
55
JOB Activities
Combining Conditional Expressions Conditional expressions can be compounded by combining them through the logical connectors AND and OR. For example, if you need to determine a value based on two conditions, you can connect the conditions with a logical connector:
IF DIVISION = 'A' THRU 'L' AND AMOUNT GE 15
This statement is true when DIVISION is equal to a letter in the range A through L and when AMOUNT is also greater than or equal to 15. Both conditions must be true for the entire statement to be true. The following statement uses the OR connector:
IF DIVISION = 'A' THRU 'L' OR AMOUNT GE 15
This statement is true when DIVISION is equal to a letter in the range A through L or when AMOUNT is greater than or equal to 15 or when both conditions are true. Either one or both of the conditions can be true to make the entire statement true. When used together in the same statement, conditions connected by AND are examined before conditions connected by OR, for example:
IF DIVISION = 'A' AND AMOUNT GE 15 OR STATE = 'GA'
In this statement, CA-Easytrieve/Plus examines the portion DIVISION = 'A' AND AMOUNT GE 15 first. If both sides of the AND in that portion are found to be true, then the entire statement is true. If not, then the portion OR STATE = 'GA' is examined and IF found to be true, the entire statement is still true. If conditions on both sides of the OR are false, then the entire statement is false. This table helps you visualize the concept of logical connectors. When DIVISION = A, AMOUNT = 15, and STATE = GA The following IF statement ... IF DIVISION ='A' AND AMOUNT GE 15 or STATE = 'GA' IF DIVISION = 'A' AND AMOUNT = 14 or STATE = 'FL' IF DIVISION = 'A' OR AMOUNT = 15 and STATE = 'FL' IF DIVISION = 'B' AND AMOUNT = 15 AND STATE = 'FL' IF (DIVISION = 'A' OR AMOUNT = 15) AND STATE = 'FL' is... TRUE FALSE TRUE FALSE FALSE
56
JOB Activities
Note: Inserting parentheses around a set of conditions can alter the outcome of the statement. Remember these three rules:
I I I
All conditional expressions are considered one statement. AND statements are evaluated before ORs. Parentheses can alter the normal order of evaluation.
Calculations
There are four arithmetic operations in CA-Easytrieve/Plus:
* / + multiplication division addition subtraction
Multiplication and division are performed before addition and subtraction in order from left to right. There must be a space before and after the arithmetic operators. Calculations follow this format:
{ } field-name { = } value-1 { EQ} { } {* { / { + { } } } } value-2
Parentheses in Calculations You can use parentheses to override the normal order of operation. Operations contained in parentheses are performed first, for example:
RESULTS = GROSS - AMT * 1.3
You can nest parentheses to further alter the order of operation. The operation proceeds from the innermost set of parentheses to the outermost:
RESULT = 1.3 * (GROSS - (AMT + DEDUCT))
In the above example, AMT and DEDUCT are added before being subtracted from GROSS. After subtraction, the difference is then multiplied by 1.3 and the product of this is assigned to the RESULT field.
57
JOB Activities
END OF FIRST READING If You completed the tutorial You branched to this chapter from the tutorial Then continue with Chapter 6, Activity Section-Input and Output Lesson 3 of Chapter 3, Standard Reports with CA-Easytrieve/Plus.
Assignment Statement
The assignment statement establishes a value in a field by copying the value from another field or literal. The value on the right of the equal sign is copied to the field on the left of the equal sign. The assignment statement also accomplishes data conversion, such as packing or unpacking data, rounding, or integerizing. Assignments generally follow this format:
field-name-1 [ ] [INTEGER] [ROUNDED ] [TRUNCATED] [ ] { } {= } {EQ} { } { {field-name-2 {literal {arithmetic expression } } } }
ROUNDED and INTEGER You can round fractional numbers or drop off the fractional component of a number by using the ROUNDED and INTEGER options of the assignment statement. Use the INTEGER option after field-name-1 to ignore the fractional portion of the value being assigned. INTEGER transfers only the digits to the left of the decimal point during the assignment.
58
JOB Activities
Use the ROUNDED option to round numbers that have a fractional component with more digits than the receiving field permits. Excess digits are truncated (on the right) once rounding is complete. Rounding follows these rules:
I
Truncation is determined by the field length and decimal places of the result field. The least significant digit in the result field is increased by 1 if the most significant digit of the excess digits is greater than or equal to 5. If the ROUNDED option is not specified, truncation occurs without rounding (after decimal alignment). This is the same as specifying TRUNCATED, which is the default. Rounding of a computed negative result occurs by rounding the absolute value of the computed result and making the final result negative.
Using both ROUNDED and INTEGER rounds the result of an assignment to the nearest integer before dropping the fractional component.
Rounding Examples
Assignment Statement RCVFLD INTEGER ROUNDED = SENDFLD RCVFLD INTEGER TRUNCATED = SENDFLD RCVFLD INTEGER = SENDFLD RCVFLD ROUNDED = SENDFLD RCVFLD TRUNCATED = SENDFLD RCVFLD = SENDFLD
INTEGER, ROUNDED, and TRUNCATED are valid only with numeric fields.
59
JOB Activities
MOVE Statement
Use the MOVE statement to transfer data from one location to another. MOVE is useful for moving data without conversion and for moving character strings with variable lengths.
I I I
You can move a field or a literal to a field or move a file to a file. A sending field longer than a receiving field is truncated on the right. A receiving field longer than the sending field is padded on the right with spaces or an alternate fill character. Spaces or zeros can be moved to one or many fields.
When you specify Format 1, data moves from one field to another filling with spaces or a specified fill character on the right. The FILL parameter lets you place specified characters in the unused spaces of the new field (the default is blank spaces).
MOVE Example 1
MOVE NAME 20 TO HOLD-NAME
Moves the first 20 characters of the NAME field to the HOLD-NAME field.
MOVE NAME CTR TO HOLD-NAME FILL '*'
A numeric length for the sending field (NAME) is replaced here by a field name CTR. CTR contains a numeric value that determines the number of characters moved to HOLD-NAME. Any remaining spaces after the move (assuming the sending field is smaller than the receiving field) is filled with asterisks. MOVE Format 2
MOVE { { { { { SPACE SPACES ZERO ZEROS ZEROES } } } } } TO field-name-1 field-name-n
510
JOB Activities
MOVE Example 2
MOVE SPACES TO NAME, HOLD-NAME, HOLD-DIV
MOVE LIKE
MOVE LIKE moves the contents of fields in one file to identically named fields in another file. The general format of the MOVE LIKE statement is:
MOVE LIKE file-name-1 TO file-name-2
---->
In the above example, the NAME field of INFILE1 is moved to the NAME field of OUTFIL1, where the last nine characters are truncated. The AMT field of INFILE1 is moved to the AMT field of OUTFIL1, where it is converted to numeric format from packed decimal format.
DO WHILE/END-DO Statements
Use the DO WHILE and END-DO statements to provide a controlled loop for repetitive program logic.
Syntax
The logic between DO WHILE and END-DO is executed until the conditional expression on the DO WHILE statement is no longer true. Conditional expressions follow the rules of IF statements.
511
JOB Activities
DO WHILE Example
JOB INPUT PERSNL NAME DO-EX-1 CTR = 0 DO WHILE CTR LT 10 CTR = CTR + 1 ** Logic ** END-DO
----->
The above DO WHILE statement repeats CTR = CTR +1 until CTR is equal to 10. At that point, control is transferred to the first statement after the END-DO statement. DO WHILE Nesting Example You can nest DO WHILE statements. (The inner logic loop must be completely in the outer logic loop.)
[ [ [ [ [ [ [ [ [ [ [ [ [ JOB INPUT PAYROLL NAME DO-EX-2 CTR1 = 0 DO WHILE CTR1 LT 10 CTR2 = 0 [ DO WHILE CTR2 LT 5 [ CTR2 = CTR2 + 1 [ [ ** Logic ** [ [ END-DO CTR1 = CTR1 + 1 ** Logic ** END-DO
O U T E R L O O P
I N N E R
In the above example, the inner DO WHILE loop executes five times for each single execution of the outer loop. When CTR1 is equal to 10, control passes to the first statement following the outer END-DO statement.
GOTO Statement
You use the GOTO statement to branch out of the normal top-to-bottom logic flow in a program. The structure of the GOTO statement is:
Syntax
{ GOTO } { } { GO TO } { label } { } { JOB }
This statement directs program control to another area in the program. CA-Easytrieve/Plus accepts either GOTO or GO TO.
512
JOB Activities
GOTO Label
Label refers to a statement label. A statement label can be up to 40 characters long. The first character must be alphabetic. GOTO label transfers control immediately to the first statement following the named statement label. The statement label can be anywhere in the same activity or procedure.
GOTO JOB
GOTO JOB transfers control to the top of the current JOB activity. This is useful to stop specific records from further processing.
GOTO Example
-----> -----> JOB INPUT PERSNL NAME DIV-LIST <------- Transfers IF DIV = 'A' | Control GOTO JOB --------------------------END-IF IF DIV = 'B' GOTO CHECK-REG-ROUTINE ---------END-IF | | Transfers ** Logic ** | Control | CHECK-REG-ROUTINE <--------------** More Logic **
STOP Statement
A STOP statement lets you terminate an activity.
Syntax
[EXECUTE]
STOP ends the current JOB or SORT activity, completes the report processing for the activity if any, and then goes on to the next JOB or SORT activity if one exists. A FINISH procedure (if one is present) is still executed before going on to the next JOB or SORT activity.
STOP Example
IF AMT NOT NUMERIC STOP END-IF
END of SECOND reading. Please continue with Chapter 6, Activity Section-Input and Output.
513
JOB Activities
SORT Statement
SORT is a separate activity (outside the activity of the JOB statement) that sequences an input file in alphabetical or numerical order based on fields specified as keys. You can sort on as many fields as your system permits. (The SORT activity uses the sort utility provided by your system.)
Syntax
file-name-1
USING field-name identifies those fields from file-name-1 that you use as sort keys. Keys are specified in major to minor order. This dictates how information is sorted. For example, you could sort a file of employee records by region, and then by location under region, and then by department under location. Region is the major sort key, location is minor, and department is more minor.
D
Optionally, D sorts the field contents in descending order (ascending order is the default).
NAME sort-name
NAME sort-name (like NAME on the JOB statement) identifies the sort activity and is used for documentation purposes only.
514
JOB Activities
Sort Example
FILE PERSNL FB(150 1800) NAME 1 10 A DEPT 11 5 N GROSS-PAY 16 4 P 2 FILE PAYSORT FB(150 1800) -----> SORT PERSNL TO PAYSORT + USING (DEPT GROSS-PAY) NAME SORT-EXAMPLE-1
The above SORT activity sorts the file PERSNL in ascending order, first by DEPT and then by GROSS-PAY under DEPT. This produces a file containing records in order by department and records with like departments in order by gross pay. SORT Procedures CA-Easytrieve/Plus normally sorts all input records and outputs them into the TO file of the SORT statement automatically. The output file usually has the same format and length as the input file. However, sometimes it is appropriate to sort only certain records and to modify the contents. To do this, you must write a sort procedure that must immediately follow the SORT statement. A sort procedure is executed through the BEFORE parameter of the SORT statement:
SORT file-name-1 TO file-name-2 [D] ... ) + + + USING NAME (field-name sort-name
[BEFORE proc-name]
I I I
A SORT procedure must immediately follow the SORT statement. You invoke a SORT procedure with the BEFORE parameter. The SORT procedure executes for each record from file-name-1 before passing the record to the sort.
BEFORE proc-name
BEFORE proc-name identifies the user-defined procedure you want to execute. CA-Easytrieve/Plus supplies input records to your sort procedure one at a time. If a BEFORE procedure is used, the SELECT statement must execute for each record that you want to sort.
I
When you use BEFORE, you must execute a SELECT statement for each record that you want returned to the output file. A SELECTed record outputs only once, even if SELECTed more than once in the procedure. Any record not SELECTed does not go to the sorted file.
515
JOB Activities
This example illustrates the use of the SORT activity and SORT procedures.
FILE PERSNL FB(150 1800) NAME 1 10 A DEPT 11 5 N GROSS-PAY 16 4 P 2 FILE PAYSORT F(19) VIRTUAL SORT-NAME 1 10 A SORT-DEPT 11 5 N SORT-GROSS-PAY 16 4 P 2 JOB INPUT PERSNL NAME ACT-1 PRINT RPT1 REPORT RPT1 LINE 1 NAME DEPT GROSS-PAY -----> SORT PERSNL TO PAYSORT USING (DEPT GROSS-PAY D) + BEFORE SELECT-REC NAME SORT-ACTIVITY SELECT-REC. PROC IF GROSS-PAY GE 500 SELECT END-IF END-PROC
In the above example, SELECT-REC is the name of the SORT procedure. The procedure selects only those records with a gross pay of greater than or equal to 500 for sorting.
proc-name
The proc-name can be one-to 40-characters long and must begin with a letter. It specifies the name of a user-defined procedure located at the end of the activity in which it is PERFORMed.
516
JOB Activities
As mentioned earlier, procedures are discrete modules of program code that perform a task. When coded, they must have this format:
proc-name. PROC ** Procedure Logic ** END-PROC
PROC
The PROC keyword must follow the proc-name separated by a period and a space. Proc-name is the same name as on the PERFORM statement.
END-PROC
Every PROC must have an END-PROC that marks the end of the procedure. At END-PROC, control is returned to the statement following the PERFORM statement that invoked the PROC.
Procedure Example
The following example performs two simple procedures based on the value of a field-named code.
IF CODE = 1 PERFORM CODE1-RTN ELSE PERFORM CODE2-RTN END-IF ** Logic ** -----> CODE1-RTN. PROC ORDER = 'NO' END-PROC CODE2-RTN. PROC ORDER = 'YES' END-PROC ----->
517
JOB Activities
START/FINISH Procedures
You use the optional START and FINISH parameters of the JOB statement to automatically incorporate procedures into processing activities.
Syntax
START Procedure START procedures execute routines before execution of the logic in the body of the JOB activity.
I
The procedure is invoked automatically after the file is opened but before reading the first input record. A typical START procedure might initialize working storage fields or establish a position in a keyed sequenced file (see POINT statement in Chapter 6).
FINISH Procedure FINISH procedures identify a procedure to execute during the normal termination of the JOB activity.
I
The procedure is invoked after the last input record is processed but before any files are closed. A typical FINISH procedure displays control information accumulated during execution of the JOB activity. CA-Easytrieve/Plus still executes FINISH procs if a STOP statement is encountered during the course of the program, but not if a STOP EXECUTE is encountered.
518
JOB Activities
Processing Tables
Tables A table is a collection of uniform data records in a form suitable for quick reference. Much like books in a library, a table has two components; an identifier that helps you find the information you are looking for (analogous to a card catalog number) and the information you are looking for (a book). With tables however, the identifier is called a search argument; the information you are after is called the description. Each entry in a table must consist of:
I
A search argument that uniquely identifies the entry. This is defined as a field with the name ARG after the FILE statement. A description (the data) associated with the search argument. This is defined as a field with the name DESC after the FILE statement.
Your objective is to obtain the description from a table based on the search argument. Rules governing the processing of search arguments are as follows:
I I I I
A table file must be arranged in ascending order by search argument. No duplicate search arguments can be placed in the file. You can use any number of tables in a job. A minimum of three entries is recommended in a table. This recommendation is made to eliminate the need of performing a binary search, which is our method of accessing a table.
The following example shows a table with search arguments and descriptions. The argument is a numeric code used to look up a descriptive state name. ARG 01 02 03 ... 47 48 49 50 WASHINGTON WEST VIRGINIA WISCONSIN WYOMING DESC ALABAMA ALASKA ARIZONA
519
JOB Activities
Creation of Table Files The creation of tables involves the inclusion of certain parameters on the CA-Easytrieve/Plus FILE statement:
FILE file-name TABLE { INSTREAM } { } { literal }
TABLE
The TABLE parameter of the FILE statement declares that the file is the object of a CA-Easytrieve/Plus SEARCH statement that accesses tables. Tables can be either:
I
or
I
INSTREAM denotes that the table file data is in your program. Such data immediately follows the file description after the ARG and DESC field definitions.
literal
Literal specifies the number of entries (records) in an external table. Specify a value here only if the number of entries is greater than 256.
Instream Table Example
The word ENDTABLE must be the last entry in an instream table and must be coded in columns 1 through 8.
FILE STATTBL TABLE ARG 1 2 N DESC 4 15 A 01 ALABAMA 02 ALASKA 03 ARIZONA ... 47 WASHINGTON 48 WEST VIRGINIA 49 WISCONSIN 50 WYOMING ENDTABLE INSTREAM
This example defines a table of state names that can now be looked up according to a two-digit code.
520
JOB Activities
Coded any place in a JOB activity Issued any number of times against any number of tables.
Syntax
file-name
File-name is the name of the table that appears on the FILE statement.
field-name-1
Field-name-1 is the name of a field that contains a value that is compared to the search argument. It must be the same length and type as the search argument (ARG).
field-name-2
Field-name-2 is the name of a field into which the description is placed if a match exists between field-name-1 and the search argument. It must be the same length and type as the description (DESC).
Testing For a Match
After using the SEARCH statement, you can test to determine whether a match was found between field-name-1 and the search argument by using a special IF statement.
Syntax
521
JOB Activities
END OF THIRD READING Please turn Chapter 6, Activity Section-Input and Output.
522
Chapter
Introduction
In CA-Easytrieve/Plus, file input/output can be controlled by CA-Easytrieve/Plus (automatic) or by you (user controlled). There are several statements available for providing input and output under a variety of conditions. All input and output occurs in the activity section of your programs. In this chapter, you find:
Reading 1
I I
Automatic input with the JOB statement Report output with the PRINT statement
Reading 2
I
User Controlled Input/Output of sequential access files including use of: DISPLAY GET PUT
Reading 3
I
Use of the POINT statement to establish a starting position for sequential processing of a keyed file Programmer Controlled Input/Output of randomly accessed files including use of: READ WRITE
61
When you specify INPUT and a file name, the records of that file are automatically made available to the logic in your JOB activity section. However, there are some implied statements being executed which you do not see in your program. Here are the steps actually taken when the JOB statement executes with automatic input.
IF THERE IS A START PROCEDURE THEN PERFORM THE START PROCEDURE END-IF OPEN FILE(S) -------> RETRIEVE THE INPUT | IF NO MORE INPUT | IF THERE IS A FINISH PROCEDURE | THEN PERFORM THE FINISH PROCEDURE | END-IF | WRAP UP THE REPORTS | GO TO THE NEXT JOB OR SORT ACTIVITY | ELSE | PERFORM LOGIC ACTIVITIES | END-IF | RESET WORKING STORAGE ------- GOTO
You can leave the INPUT parameter off the JOB statement. If you do, CA-Easytrieve/Plus provides the automatic input by getting it from either the first file described in your library section or the output of a directly previous SORT if any.
Printing Reports
Report printing is initiated through the CA-Easytrieve/Plus PRINT statement, which looks like this:
PRINT [report-name]
62
PRINT is not completely automatic in that it does permit you a certain amount of control. You can execute PRINT anywhere in your JOB activity logic and you can use conditional logic to determine when it should execute. But once PRINT is executed, it activates the designated report declaration and takes care of all output considerations automatically. In most cases, however, your reports do not go directly to a printer (through a print file). Rather, they go to an CA-Easytrieve/Plus work file (sometimes called a spool file). Work files are necessary in two cases:
I
When the printer (print file) is already activated by a previous report of the same JOB activity (multiple reports directed to the same printer). When a report requires sequencing (that is, a SEQUENCE statement is present).
The following graphic illustrates how the PRINT statement is executed for reports going to a single printer.
63
If work files are created, as presented in the previous graphic, they are held until the end of the job activity. At end of job, they are processed as follows:
END OF FIRST READING If You completed the tutorial You branched to this section from the tutorial Then continue with Chapter 7, Activity Section-Reporting Lesson 4 or Chapter 3, Standard Reports with CA-Easytrieve/Plus
64
DISPLAY Statement A DISPLAY statement sends data to a specified output file or output device. DISPLAY is commonly used for:
I I I
If DISPLAY is used in the logic portion of the JOB activity and output is to a report, the lines to DISPLAY are interspersed throughout the report (every other line) in an unSEQUENCEd report or printed at the beginning of a SEQUENCEd report (before the first title). When you use DISPLAY in report procedures, you are only permitted to display to the system output device (not to a data file). The DISPLAY statement has three different formats. The next two pages show two of the formats with explanations and examples of the use of each. The third format is used only with extended reporting and is explained in the CA-Easytrieve/Plus Extended Reporting Facility Guide.
65
DISPLAY Format 1
DISPLAY [file-name] [ ] [NEWPAGE ] [SKIP number] [ ] [ [ [ [ [ [ [ [ ] ] [+] integer ] [-] ] [ ] ] COL integer ] POS integer ] ] +
file-name
When you specify file-name, CA-Easytrieve/Plus prints data to the named file. If you do not specify file-name, the default is SYSPRINT/SYSLST (the system output printers for OS/390 and VSE, respectively).
NEWPAGE
The NEWPAGE option specifies that a skip to a new page occurs before the data is printed.
SKIP number
The SKIP number option specifies that the designated number of lines (number) are skipped before the data is printed.
Integer
Coding a positive or negative integer modifies the horizontal spacing between display items.
COL integer
The COL integer option specifies the print column number where CA-Easytrieve/Plus places the next display item.
POS integer
When used on report procedures, the POS integer option positions the next display item under the corresponding position on the LINE 01 statement.
literals or field-names
Code literals or field-names in the order you want them to appear on the printed line.
Examples of Format 1
DISPLAY SKIP 2 '**RECORD NOT FOUND FOR KEY' +2 SSN DISPLAY ERRFILE 'THIS REPORT IS FOR ERRORS + THAT WERE FOUND IN THE EDIT PHASE.'
66
DISPLAY Format 2
DISPLAY [file-name] [ ] [NEWPAGE ] HEX [SKIP number] [ ] [ ] [field-name] [file-name ] [ ]
In this format, CA-Easytrieve/Plus produces a hexadecimal and character dump of the current record or the specified field-name. The parameters, other than HEX, operate the same as in Format 1.
Example of Format 2
DISPLAY HEX NAME
produces:
CHAR WIMN ZONE ECDD4444444444444444 NUMR 69450000000000000000 1...5...10...15...20
GET Statement The GET statement retrieves the next record of the named file into the file input area. Its format is:
GET file-name
file-name
File-name identifies the input file defined in the library section. You must test for end-of-file (EOF) when using the GET command.
GET Example
FILE MASTER FB(150 1800) EMP# 9 5 N NAME 17 16 A GROSS 94 4 P 2 JOB INPUT NULL NAME READ-SEQ-MAN -----> GET MASTER IF EOF MASTER STOP END-IF IF GROSS > 500 PRINT RPT1 END-IF REPORT RPT1 LINE 1 EMP# NAME GROSS
You cannot use GET for a file designated as automatic input. To inhibit automatic input, specify INPUT NULL on the JOB statement. For example:
JOB INPUT NULL
You can GET a secondary file while automatically accessing a primary file.
67
PUT Statement The PUT statement outputs to a file sequentially. Its format is:
Syntax
PUT outfile [FROM file-name]
outfile
Outfile identifies a file defined in the library section to which you are outputting data.
FROM file-name
Using the FROM option is like performing a MOVE of data from file-name to outfile before performing the PUT.
PUT Example 1
FILE PERSNL FB(150 1800) EMP# 9 5 N NAME 17 16 A GROSS 94 4 P 2 FILE NEWPAY2 F(20) VIRTUAL RETAIN NAME 1 16 A GROSS 17 4 P 2 JOB INPUT PERSNL NAME PUT-EXAMPLE ** Logic ** MOVE LIKE PERSNL TO NEWPAY2 PUT NEWPAY2
----->
PUT Example 2
FILE MASTER FB(150 1800) EMP# 9 5 N NAME 17 16 A GROSS 94 4 P 2 FILE OUTMAST FB(150 1800) JOB INPUT MASTER NAME CREATE-SEQ IF GROSS > 500 * -----> PUT OUTMAST FROM MASTER * END-IF
68
YOU ARE NOW STARTING THE THIRD READING OF CHAPTER 6. POINT Statement The POINT statement establishes a starting position for sequential processing of a keyed file. This statement is for use on ISAM and VSAM files. CA-Easytrieve/Plus does not require that you specify the length or location of the record key field. Data becomes available to your program only after the next successful sequential retrieval by automatic file input or a GET statement.
Syntax
file-name
File-name is an indexed, keyed, or relative-record file described on a FILE statement in the library section of your program.
field-name or literal
You can use any valid field-name or literal as a key search value for the POINT statement. This search value is compared to the record key value in the file to determine the starting location for sequential access.
STATUS
STATUS sets the system defined field FILE-STATUS with a return code from the operating systems data management control program. By checking FILE-STATUS at some point in your program after coding STATUS, you can determine if the input/output request was performed properly. The FILE-STATUS field should always contain a value of zero after a successful I/O request. This parameter is also used on the READ and WRITE statements.
69
POINT Example
The following example causes sequential processing of a VSAM file to begin on a record with a key value of 01963 or, if no such key exists, on a record with the next higher key value.
FILE PERSNL VS EMP# 9 5 N NAME 17 8 A DEPT 98 3 N GROSS 94 4 P 2 JOB INPUT NULL NAME MYPROG POINT PERSNL GE '01963' STATUS IF FILE-STATUS NE 0 OR EOF PERSNL DISPLAY 'BAD POINT...FILE STATUS= ' FILE-STATUS STOP END-IF GET PERSNL STATUS IF FILE-STATUS NE 0 DISPLAY 'BAD GET...FILE STATUS= ' FILE-STATUS ELSE DISPLAY PERSNL END-IF STOP
>
file-name
File-name is the VSAM file-name located on a FILE statement in the library section of your program.
field-name/literal
Field-name contains the value of the VSAM key to find. You can also express this key value as a literal.
610
The following example involves the use of two files, PAYROLL and MASTER. PAYROLL is a sequential transaction file containing key values. MASTER is a master file that is keyed for random access. The PAYROLL file is made available to the program through automatic input. Key values from this file, located in the EMP-NO field, are used to READ the MASTER file. READs returning non-zero FILE-STATUS values DISPLAY an error message.
FILE PAYROLL EMP-NO 1 3 N FILE MASTER VS EMP-NAME 40 10 A * JOB INPUT PAYROLL NAME READ-EXAMPLE -----> READ MASTER KEY EMP-NO STATUS IF MASTER:FILE-STATUS NOT ZERO DISPLAY ERRRPT 'ERROR READING VSAM + FILE WITH KEY: ' EMP-NO + ' FILE-STATUS IS ' MASTER:FILE-STATUS GOTO JOB END-IF ** Logic **
WRITE Statement Use the WRITE statement to add a new record, update an existing record, or delete a record from a VSAM master file.
I
When you use WRITE, you must specify the UPDATE parameter on the FILE statement of the file being written to. Before you can issue a WRITE to delete or update, you must already have read the record you are writing.
Format 1
WRITE Example
The example on the following page involves two files, TRANS and PAYVS. TRANS is a sequential transaction file containing transaction records with a key value located in the EMP-NO field. PAYVS is a master VSAM file that is keyed for random access.
611
The TRANS file is made available to the program through automatic input. The EMP-NO field of the TRANS file is used as a key to READ the PAYVS file. The value returned to the FILE-STATUS field after a READ is checked to find out if a record with a matching key value was found. If no record was found, then an ADD is performed. If a record was found, then an UPDATE is performed. In either case, procedures (not shown) are PERFORMed to check the FILE-STATUS value for each WRITE statement executed.
FILE TRANS EMP-NO 1 3 N GROSS 15 4 P 2 * FILE PAYVS VS (UPDATE) GROSS 15 4 P 2 * JOB INPUT TRANS NAME UPDATE-PGM READ PAYVS KEY EMP-NO STATUS IF PAYVS:FILE-STATUS = 16 . * RECORD NOT FOUND -----> WRITE PAYVS ADD FROM TRANS STATUS PERFORM ADD-STATUS-CHK GOTO JOB END-IF IF PAYVS:FILE-STATUS = 0 . * RECORD FOUND MOVE LIKE TRANS TO PAYVS -----> WRITE PAYVS UPDATE STATUS PERFORM UPDATE-STATUS-CHK GOTO JOB END-IF
Format 2
Example
FILE TRANS TRANS-KEY 14 3 A TRANS-CODE 17 1 A. * TRANS-CODE value of D means Delete * FILE PAYVS VS (UPDATE) JOB INPUT TRANS NAME VSAM-DELETE IF TRANS-CODE = 'D' READ PAYVS KEY TRANS-KEY STATUS IF FILE-STATUS = 0 -----> WRITE PAYVS DELETE STATUS PERFORM WRITE-STAT-CHECK ELSE DISPLAY 'ERROR IN STATUS CHECK' END-IF END-IF
612
Chapter
Activity Section-Reporting
Introduction
One of the most powerful features of CA-Easytrieve/Plus is the easy-to-use reporting facility. Seven basic statements control most aspects of report production:
I I I I I I I
Procedures are also available for customization of reports permitting great flexibility and user control. In this chapter you find:
Reading 1
I I I I
Standard reports Defining basic report characteristics with the REPORT statement Spacing control parameters of the REPORT statement Defining report content with report definition statements, including SEQUENCE, CONTROL, SUM, TITLE, HEADING, and LINE
Reading 2
I I
Label reports Testing aid and format determination parameters of the REPORT statement
Activity Section-Reporting
71
Standard Reports
Reading 3
I I I I
More format determination parameters of the REPORT statement Multiple reports File directing parameters of the REPORT statement Report procedures.
Standard Reports
The report facility of CA-Easytrieve/Plus includes all of the functions necessary to produce most reports very easily. Using CA-Easytrieve/Plus report options, you can produce almost any report format. Most reports, however, are variations of what is termed the standard report. Typically, standard reports consist of the following items:
I I I
TOP MARGIN TITLE AREA (optional) where titles are printed HEADING AREA (optional) where headings are printed REPORT BODY where lines or line groups are printed P A G E S I Z BOTTOM MARGIN E
We describe how CA-Easytrieve/Plus formats and generates titles, headings, and lines on the following pages.
72
Standard Reports
Titles
The title is the first item printed on each report page. The TITLE statement in your program specifies the report title. You can have up to 99 TITLE statements in your program. The following example shows the title area of a report.
<--------------------------LINESIZE-------------------------------> SYSDATE V 99/99/99 PAGEWRD Page count V V PAGE ZZ,ZZ9
01 02 04 99
When more than one TITLE statement is coded in your program, they must be followed by sequence numbers (01 - 99). The following list highlights some points to remember about standard report titles:
I I
TITLE 01 items are printed at top-of-form. The current date and page count are automatically placed at either end of the TITLE 01 line. Title lines are centered in the space indicated by the LINESIZE parameter of the REPORT statement. The title sequence number controls the vertical spacing of titles relative to the first title. The SPACE parameter of the REPORT statement controls the number of blank characters (spaces) between title items.
The following example shows two TITLE statements and their resulting titles:
Statements: FILE PERSNL FB(150 1800) DEPT W 3 N VALUE '903' JOB INPUT PERSNL NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINESIZE 50 > TITLE 01 'TEMPORARY EMPLOYEES' > TITLE 03 'IN DEPARTMENT' DEPT LINE 01 ' ' Produce: 01/09/89 TEMPORARY EMPLOYEES IN DEPARTMENT 903 PAGE 1
Activity Section-Reporting
73
Standard Reports
Note: A blank line was inserted where a TITLE 02 item would have otherwise printed.
Headings
Headings in a report describe the content of line items. Line items are the single pieces of information that make up a line on a report. Usually, they form vertical columns. Each heading is centered over its associated line item. The following list highlights points to remember about headings:
I
If no headings are defined, CA-Easytrieve/Plus uses the field names of the DEFINE statement as headings. You can specify headings with HEADING statements in the report subactivity or by HEADING parameters on DEFINE statements. HEADING statements override any HEADING parameters defined for the same field. Line items that are literals (do not come from defined fields) do not have headings. Headings can be stacked (take up more than one vertical space).
This next example shows how you can define headings in your program.
Statements: > FILE PERSNL FB(150 1800) SSN 4 5 P HEADING('SOCIAL' 'SECURITY' 'NUMBER') NAME 17 20 A PAY-NET 90 4 P 2 JOB INPUT PERSNL NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 HEADING PAY-NET ('NET' 'PAY') LINE NAME SSN '* NO OVERTIME *' PAY-NET
>
Produce: SOCIAL SECURITY NUMBER 025-30-5228 121-16-6413 * NO OVERTIME * * NO OVERTIME * NET PAY 251.65 547.88
74
Standard Reports
Line Group
A line is the result of a single LINE statement in your program. Each time a PRINT statement is executed, all of the fields indicated on the LINE statement are sent to the printer as a single formatted line. If there is more than one LINE statement in your program, then they are output in groups for each PRINT statement issued. All of the LINE statements of the report make up a line group, which is also called a logical report line.
LINE 01 ...} LINE 02 ...} LINE 03 ...} ... line group (logical report line)
The resulting value is called the item length. 2. The first line item in any LINE statement after LINE 01 (that is, LINE 02 through LINE 99) is positioned under the first line item of LINE 01. The data is left-justified under the LINE 01 data, regardless of the heading size. Blank characters (spaces) separate all line items according to the value of the SPACE parameter (if any) of the REPORT statement. The SPACE parameter overrides automatic spacing.
3.
When CA-Easytrieve/Plus analyzes a LINE statement according to the above rules, the total number of characters on that line must not exceed the value specified on the LINESIZE parameter of the REPORT statement.
Activity Section-Reporting
75
Report Processing
NAME 17 20 ADDR-STREET 37 20 ADDR-CITY 57 12 SEX 127 JOB INPUT PERSNL NAME PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 LINE NAME SSN SEX LINE 02 ADDR-STREET ADDR-CITY item area 1 5 10 15 ...............
Report Processing
The PRINT statement described in Chapter 6 identifies records for output and initiates the execution of a report declaration. It does not directly cause the printing of the report. Printing and formatting of a report are done by the statements that make up the report declaration (sometimes called the report subactivity since report declarations are considered subactivities of the JOB activity). There are two parts to every report declaration:
I
REPORT statement specifies the type and physical characteristics of the report. Report definition statements define the content of the report.
REPORT Statement
The REPORT statement is the first statement coded in a report declaration. The report statement includes the keyword REPORT and various report parameters. Report parameters are keywords that let you assign values that alter the physical characteristics of the final report. Although you can specify a large number of report parameters, you can produce most reports using default (CA-Easytrieve/Plus-defined) parameter values.
76
Report Processing
Report statement parameters provide you with a simple way to define tailored reports. They can be divided into three categories:
I I I
In this reading, we describe only spacing control parameters. Spacing Control Parameters The following REPORT statement parameters control spacing on a standard format report.
PAGESIZE
Number of blanks inserted (horizontally) between field columns and between fields and literals in title and detail lines (default is 3).
TITLESKIP
Number of blank lines inserted after last title line before first heading or detail line (default is 3).
SPREAD
Spreads the columns of data evenly over the entire line, overrides the SPACE parameter (default is NOSPREAD).
NOADJUST
Left-justifies the title lines and report on the page. The default is centering the report on the page. SPREAD and NOADJUST are mutually exclusive.
NODATE
Suppresses printing the system date in positions one through eight of the first title line.
Activity Section-Reporting
77
Report Processing
NOPAGE
Suppresses printing column headings. Spacing control parameters are all optional. When used, you can code them on the REPORT statement in any order. The general format for these parameters is:
REPORT { { { { { { { { { { { { { { { { report-name [PAGESIZE nn] [LINESIZE nn] [SKIP nn] [SPACE nn] [TITLESKIP nn] [ [SPREAD [NOSPREAD [ ] ] ] ] + + + + + +
+ + + + +
78
Report Processing
The program just shown produces the following report (only two pages are shown):
EXAMPLE EMPLOYEE NAME WIMN EMP# 12267 PROGRAM DEPT 903 GROSS $373.60
PROGRAM
EMP# 11473
DEPT 943
GROSS $759.20
You can sequence on any field from any input file or any W working storage field. You can sequence on as many fields as your system sort permits. Sequence fields are stated in major to minor order. The default sequence order is ascending. Coding D after a field-name reverses the order for that field only.
I I I
Activity Section-Reporting
79
Report Processing
Syntax
SEQUENCE Examples
SEQUENCE CO DIV DEPT GROSS-PAY D SEQUENCE GROUP AMT D CODE
CONTROL A CONTROL statement specifies that a report should automatically accumulate and print totals. A control break occurs whenever the value of any control field changes or end-of-report is reached. Control fields can be any non-quantitative field from any input file or any W working storage field. At each control break, totals are printed for any quantitative fields specified in the report.
I I
You can specify an unlimited number of control fields. Fields are coded on the CONTROL statement in a major to minor order.
Syntax
[ ] [NEWPAGE] [ RENUM ] [ ]
[NOPRINT]
...
Final totals are automatically provided. You can alter the default by coding FINAL NOPRINT. NOPRINT, following any field-name, suppresses printing totals for that field (which are still accumulated) at the corresponding control break. NEWPAGE, following any field or FINAL, creates a new page after printing the control break totals (or, in the case of FINAL, before printing the final totals). Page numbers continue. RENUM, following any field or FINAL, creates a page break and restarts page numbers at 1 after printing the control break totals (or, in the case of FINAL, before printing the final totals).
Control Examples
CONTROL CO RENUM DIV DEPT NOPRINT CONTROL FINAL NOPRINT CO NEWPAGE DIV
710
Report Processing
SUM The SUM statement specifies the quantitative fields to total for a control report. Normally, on control reports, CA-Easytrieve/Plus totals all quantitative fields specified on the LINE statement (described later). The SUM statement overrides this process. Only the fields specified on the SUM statement are totaled.
I I
You can use SUM only in control reports. You can SUM any quantitative field from any active file or any W field.
Syntax
SUM Example
SUM GROSS NET
TITLE The TITLE statement lets you define a title for your report. Up to 99 titles are permitted. You can specify literals and field names on the TITLE statement.
Syntax
You use nn to alter the normal horizontal spacing between literals or fields on the title lines. The value of nn spaces are added to or subtracted from the SPACE parameter (which normally has a default of 3). COL nn specifies the print column number where the next title item begins. If you specify COL nn, you must also specify NOADJUST on the REPORT statement. If no TITLEs are coded, the date and page number, which are normally automatically included in the title, do not print.
Activity Section-Reporting
711
Report Processing
TITLE Examples
TITLE 01 'REPORT ONE' TITLE 03 'THIS PAGE FOR DIV' -2 DIV-NO TITLE 04 'ABC COMPANY'
prints
12/10/85 REPORT ONE THIS PAGE FOR DIV 15 ABC COMPANY PAGE 1
Occasionally, you might want to print control field values in report titles. You can accomplish this by using the NEWPAGE parameter of the CONTROL statement and including a control field name on the TITLE statement. Then, control breaks occur on a new page with the control field value in the title. The following gives an example of this. (Output was edited for the purpose of illustration.)
Statements: FILE PERSNL FB(150 1800) NAME 17 8 A STATE 69 2 A ZIP 71 5 N PAY-NET 90 4 P 2 MASK (A '$$,$$9.99') JOB INPUT PERSNL NAME MY-PROG PRINT REPORT-1 REPORT REPORT-1 LINESIZE 65 SEQUENCE STATE ZIP NAME CONTROL STATE NEWPAGE TITLE 01 'REPORT FOR THE STATE OF' STATE LINE 01 NAME STATE ZIP PAY-NET
>
712
Report Processing
Produce: 1/17/89 NAME JUDAR PHILPS CROCI WARD 1/17/89 NAME MILLER PETRIK LACH VETTER 1/17/89 NAME MCMAHON CORNING BYER ARNOLD REPORT FOR THE STATE OF STATE DC ZIP 00000 00000 20002 20002 DC PAGE 1
DC
REPORT FOR THE STATE OF STATE MD ZIP 20014 20014 20028 20028
MD
REPORT FOR THE STATE OF STATE VA ZIP 22202 22204 22207 22209
VA
HEADING As with the DEFINE statement in the library section, you can define an alternate column heading for a field in the report declaration. The HEADING statement overrides a HEADING parameter coded for the same field in the library section of the program. When alternate headings are not defined by a HEADING statement or the HEADING parameter of DEFINE, then the field name is used as the heading.
I I
Use one HEADING statement per field. Words in a heading can be stacked to save space in the column. This is done by placing individual words in single quotes.
Syntax
Activity Section-Reporting
713
Report Processing
HEADING Example 1
HEADING EMP-NO 'EMP NO'
HEADING Example 2
HEADING SSN ('SOCIAL' 'SECURITY' 'NUMBER')
LINE Statement The LINE statement defines the content of a report line. Multiple LINE statements define a line group. Use LINE 01 to designate headings for the report columns.
I I
You can specify up to 99 lines per record. You can specify any field from an input file or working storage.
Syntax
When literals are specified, they print on all lines but are not used as headings. The value of nn alters the normal spacing between line items. The value of nn is added to or subtracted from the SPACE parameter (which normally has a default of 3). POS (position) provides for aligning fields under the corresponding column heading positions indicated on the LINE 01 statement. COL nn specifies the print column number where the next field begins. If you specify COL nn, you must also specify NOADJUST on the REPORT statement.
714
Label Reports
LINE Example
LINE 01 DEPT DIV NAME LINE 02 POS 2 CODE POS 3 ADDRESS LINE 03 POS 3 CITY-STATE
END OF FIRST READING If You completed the tutorial You branched to this section from the tutorial Then continue with Chapter 8, Macros Lesson 5 of Chapter 3, Standard Reporting with CA-Easytrieve/Plus
Label Reports
YOU ARE NOW STARTING THE SECOND READING OF CHAPTER 7 You can use the CA-Easytrieve/Plus label report capability to print mailing labels and other applications that require inserting variable data in a repetitious format. A label report is different from a standard report in the following ways: 1. 2. 3. Label reports do not have titles and headings. You can print multiple labels side-by-side. Controlled label reports permit control breaks, but do not automatically total quantitative fields. You can, however, specify totals on a SUM statement and process them in BEFORE-BREAK and AFTER-BREAK procedures (described later in this chapter).
You can use the label report function whenever each PRINT statement produces a complete logical print page.
Activity Section-Reporting
715
Label Reports
Label Format
Specify label reports through the LABELS option of the REPORT statement. The following example illustrates the basic label report page format:
A label line consists of one or more labels positioned across the label page. In the previous example, labels 1 through 4 compose a label line. A single line group composes each label. Therefore, CA-Easytrieve/Plus produces a label for each PRINT statement execution. CA-Easytrieve/Plus formats the labels on the page in the order shown in the above graphic. DOWN and SIZE (subparameters of the LABELS option) indicate the dimensions of each label. Format Determination Parameters Format determination parameters are parameters of the REPORT statement that determine the type of report to print. The LABELS parameter is responsible for formatting reports that print mailing labels. LABELS specifies that the report is in label format rather than the standard report format. It automatically inhibits the printing of the date, page, headings, and titles. The following subparameters are used with LABELS.
I
ACROSS specifies the number of labels printed across the print line (default is 4). DOWN specifies the number of lines down from the first line of the first label to the first line of the second label (default is 6). SIZE specifies the number of print positions from the first position on the first label to the first position on the second label (default is 30).
Syntax
716
A A A N
JOB INPUT PERSNL NAME FIRST-PROGRAM PRINT PAY-RPT REPORT PAY-RPT LABELS (ACROSS 3 DOWN 6 SIZE 23) LINE 01 NAME LINE 02 ADDR-STREET LINE 03 ADDR-CITY ADDR-STATE LINE 04 ADDR-ZIP
DC
DC
Activity Section-Reporting
717
[EVERY
I
integer]
The LIMIT option limits the number of records the report processes. The value of integer can be any integer literal in the range 1 through 32,767. The EVERY option lets you specify that only every nth line is printed in the report. The value of integer can be any integer literal in the range 1 through 32,767. END OF SECOND READING Please turn to Chapter 8, Macros.
718
SUMMARY Suppresses the printing of detail data on control reports. Permits only the printing of total lines. SUMFILE Generates a file containing control fields and totals during generation of a control report.
Syntax
[DTLCOPY])
] ] + ] ] ]
+ +
Activity Section-Reporting
719
DTLCTL
The DTLCTL (Detail Control) parameter of REPORT establishes the method for printing control field values on detail lines of a control report by using the subparameters EVERY, FIRST and NONE. The following shows an example program using DTLCTL options. You can run the program shown with any of the three options to produce the results on the following pages.
FILE FILE1 CARD LAST-NAME 1 5 A STATE 6 2 A ZIP 8 5 N PAY-NET 13 5 N 2 JOB INPUT FILE1 NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 + DTLCTL option (* replace with one: EVERY, FIRST, or NONE *) SEQUENCE STATE ZIP LAST-NAME CONTROL STATE ZIP LINE 01 LAST-NAME STATE ZIP PAY-NET END BROWNIL6007612345 BROWNIL6007667890 JONESIL6007709876 JONESIL6007754321 SMITHTX7521811111 SMITHTX7521866666
The following example shows the use of the EVERY option of DTLCTL. Control values (contents of the STATE and ZIP fields) are printed on every detail line.
Line | Description | | | | detail | detail | ZIP total | | detail | detail | ZIP total | | STATE total | | detail | detail | ZIP total | | STATE total | | FINAL total | Control Fields LAST-NAME BROWN BROWN JONES JONES STATE IL IL IL IL IL IL IL SMITH SMITH TX TX TX TX 75218 75218 75218 ZIP 60076 60076 60076 60077 60077 60077 Accumulator Field PAY-NET 678.90 123.45 802.35 543.21 98.76 641.97 1444.32 666.66 111.11 777.77 777.77 2222.09
720
The following example shows the use of the FIRST option of DTLCTL. Control values (contents of the STATE and ZIP fields) are printed on the first detail line at top-of-page and on the first detail line after each break. This is the normal default for printing of detail lines on control reports.
Line | Description | | | | detail | detail | ZIP total | | detail | detail | ZIP total | | STATE total | | detail | detail | ZIP total | | STATE total | | FINAL total | Control Fields LAST-NAME BROWN BROWN JONES JONES STATE IL IL IL IL IL SMITH SMITH TX TX TX 75218 75218 ZIP 60076 60076 60077 60077 Accumulator Field PAY-NET 678.90 123.45 802.35 543.21 98.76 641.97 1444.32 666.66 111.11 777.77 777.77 2222.09
The following example shows the use of the NONE option of DTLCTL. Control values (contents of STATE and ZIP fields) are not printed on detail lines.
Line | Description | | | | detail | detail | ZIP total | | detail | detail | ZIP total | | STATE total | | detail | detail | ZIP total | | STATE total | | FINAL total | Control Fields LAST-NAME BROWN BROWN JONES JONES STATE ZIP Accumulator Field PAY-NET 678.90 123.45 802.35 543.21 98.76 641.97 1444.32 666.66 111.11 777.77 777.77 2222.09
IL
60076
IL IL
60077
SMITH SMITH
TX TX
75218
SUMCTL
The SUMCTL (Sum Control) parameter of REPORT establishes the method for printing control field values on total lines of a control report by using the subparameters ALL, HIAR, NONE and TAG. (The DTLCOPY subparameter controls all non-control non-total field values on total lines and is shown with the SUMMARY parameter later in this chapter.) The following shows an example program using these options.
Activity Section-Reporting
721
You can run the program shown with any of the four options to produce the results on the following pages.
FILE FILE1 CARD LAST-NAME 1 5 A STATE 6 2 A ZIP 8 5 N PAY-NET 13 5 N 2 JOB INPUT FILE1 NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 + SUMCTL option (* replace with one: ALL, HIAR, NONE, or TAG *) SEQUENCE STATE ZIP LAST-NAME CONTROL STATE ZIP LINE 01 LAST-NAME STATE ZIP PAY-NET END BROWNIL6007612345 BROWNIL6007667890 JONESIL6007709876 JONESIL6007754321 SMITHTX7521811111 SMITHTX7521866666
The following example shows the use of the ALL option of SUMCTL. Control values (contents of STATE and ZIP fields) are printed on all total lines.
Line | Description | | | | | | ZIP total | | | | ZIP total | | STATE total | | | | ZIP total | | STATE total | | FINAL total | Control Fields LAST-NAME BROWN BROWN JONES JONES STATE IL IL IL IL IL SMITH SMITH TX TX TX TX ZIP 60076 60076 60077 60077 60077 75218 75218 75218 75218 Accumulator Field PAY-NET 678.90 123.45 802.35 543.21 98.76 641.97 1444.32 666.66 111.11 777.77 777.77 2222.09
722
The following example shows the use of the HIAR option of SUMCTL. Control values (contents of STATE and ZIP fields) are printed in hierarchical order on total lines. This is the normal default for printing total lines on control reports.
Line | Description | | | | | | ZIP total | | | | ZIP total | | STATE total | | | | ZIP total | | STATE total | | FINAL total | Control Fields LAST-NAME BROWN BROWN JONES JONES STATE IL IL IL IL IL SMITH SMITH TX TX TX 75218 75218 ZIP 60076 60076 60077 60077 Accumulator Field PAY-NET 678.90 123.45 802.35 543.21 98.76 641.97 1444.32 666.66 111.11 777.77 777.77 2222.09
The following example shows the use of the NONE option of SUMCTL. Control values (contents of STATE and ZIP fields) are not printed on total lines.
Line | Description | | | | | | ZIP total | | | | ZIP total | | STATE total | | | | ZIP total | | STATE total | | FINAL total | Control Fields LAST-NAME BROWN BROWN JONES JONES STATE IL ZIP 60076 Accumulator Field PAY-NET 678.90 123.45 802.35 543.21 98.76 641.97 1444.32 SMITH SMITH TX 75218 666.66 111.11 777.77 777.77 2222.09
IL
60077
Activity Section-Reporting
723
TAG The TAG subparameter of SUMCTL creates a line area on the left side of the total line for an annotation. This LINE 01 item is governed by the following rules: 1. 2. 3. 4. The length of the area is the length of the longest control-field-name plus seven. TOTAL preceded by the control field name is the annotation for control break totals. FINAL TOTAL is the annotation for final totals. The line item area is positioned at the left margin of the report.
The example on the following page illustrates how tags appear on a report.
Statements: FILE FILE1 CARD LAST-NAME 1 5 A STATE 6 2 A ZIP 8 5 N PAY-NET 13 5 N 2 JOB INPUT FILE1 NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 SUMCTL TAG SEQUENCE STATE ZIP LAST-NAME CONTROL STATE ZIP LINE 01 LAST-NAME STATE ZIP PAY-NET END BROWNIL6007612345 BROWNIL6007667890 JONESIL6007709876 JONESIL6007754321 SMITHTX7521811111 SMITHTX7521866666 Produce: LAST-NAME BROWN BROWN ZIP TOTAL JONES JONES ZIP TOTAL > STATE TOTAL SMITH SMITH ZIP TOTAL STATE TOTAL > FINAL TOTAL TX 75218 STATE IL ZIP 60076 PAY-NET 678.90 123.45 802.35 543.21 98.76 641.97 1444.32 666.66 111.11 777.77 777.77 2222.09
>
IL
60077
724
SUMMARY Reports
SUMMARY is a parameter of the REPORT statement that prints the report named on the REPORT statement as a summary report. Summary reports consist of only total lines that normally include only control fields and totals. All detail lines are suppressed from printing.
DTLCOPY
It can be helpful on summary reports to have detail field information printed on the total lines to provide greater readability. The DTLCOPY option of the SUMCTL parameter of the REPORT statement copies detail fields (non-control and non-total fields) as they appear just before the control break onto the total lines of the summary report. The following example shows a program that produces a summary report and includes the DTLCOPY option. Note: If this option were not used, the LAST-NAME values do not print.
Statements: FILE FILE1 CARD LAST-NAME 1 5 A STATE 6 2 A ZIP 8 5 N PAY-NET 13 5 N 2 JOB INPUT FILE1 NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 + SUMMARY SUMCTL DTLCOPY SEQUENCE STATE ZIP LAST-NAME CONTROL STATE ZIP LINE 01 LAST-NAME STATE ZIP PAY-NET END BROWNIL6007612345 BROWNIL6007667890 JONESIL6007709876 JONESIL6007754321 SMITHTX7521811111 SMITHTX7521866666 Produce: Line | Description | | ZIP total | ZIP total | STATE total | ZIP total | STATE total | | FINAL total | LAST-NAME BROWN JONES SMITH STATE IL IL IL TX TX ZIP 60076 60077 75218 PAY-NET 802.35 641.97 1444.32 777.77 777.77 2222.09
Activity Section-Reporting
725
Summary Files
A summary file, containing all the control and summed field values at each minor break, can be optionally generated during processing of a control report. JOB activities in your program can subsequently process the summary file to provide reports not otherwise available through the standard report facilities of CA-Easytrieve/Plus. You can request the summary file by defining the file in the library and then referencing it with the REPORT SUMFILE parameter. A FILE statement must contain the file-name, record format, logical record length, and blocksize for the summary file. To use the summary file as input to a subsequent CA-Easytrieve/Plus JOB activity, you should specify the file as an unblocked VIRTUAL file. The record format can be any standard format. The record length must be large enough to contain the data that is output. Blocksize should be appropriate for the specified format and record length. The summary file record contains three parts: 1. 2. 3. Control field area TALLY Summed field area
The control field area is a concatenation of the control fields specified on the CONTROL statement. The sum of the lengths of the control fields defines the length of the control field area. TALLY is a ten-byte field that contains the value of the system defined field TALLY. TALLY accumulates the number of detail records that comprise a control break. It is a 10-byte packed decimal field with no decimal places. The summed fields are concatenated to form the remaining segment of the summary file record. Each summed field is a 10-byte packed field with the same decimal specification as the source field. Therefore, the summary file record length is the sum of the control field area length, plus 10 bytes for TALLY, plus 10 times the number of summed fields.
726
The following example illustrates the use of SUMFILE data. The SUMMARY parameter is coded to control the printed output and does not affect the summary file. The values of SFILE are listed in order of ascending magnitude in SFILE-STATE, without reprocessing the original data:
Statements: FILE FILE1 CARD LAST-NAME 1 5 A STATE 6 2 A ZIP 8 5 N PAY-NET 13 5 N 2 FILE SFILE F(30) SFILE-STATE 1 2 A SFILE-ZIP 3 5 N SFILE-TALLY 8 10 P 0 SFILE-PAY-NET 18 10 P 2 * JOB INPUT FILE1 NAME MYPROG PRINT REPORT1 REPORT REPORT1 LINESIZE 65 + SUMMARY SUMFILE SFILE SUMCTL DTLCOPY SEQUENCE STATE ZIP LAST-NAME CONTROL STATE NEWPAGE ZIP TITLE 'REPORT FOR THE STATE OF' STATE LINE 01 LAST-NAME STATE ZIP PAY-NET * JOB INPUT SFILE NAME MYPROG2 PRINT REPORT2 REPORT REPORT2 NOADJUST SEQUENCE SFILE-STATE SFILE-PAY-NET LINE 01 SFILE-STATE SFILE-ZIP + SFILE-TALLY SFILE-PAY-NET END BROWNIL6007612345 BROWNIL6007667890 JONESIL6007709876 JONESIL6007754321 SMITHTX7521811111 SMITHTX7521866666 Produce: SFILE-STATE IL IL TX SFILE-ZIP 60077 60076 75218 SFILE-TALLY 2 2 2 SFILE-PAY-NET 641.97 802.35 777.77
Activity Section-Reporting
727
Multiple Reports
Multiple Reports
Multiple Reports to Single Printer
You can produce several reports simultaneously with one pass of the input file. No special coding is needed for multiple reports on the same printer. The following program produces three reports from one input file.
FILE PERSNL FB(150 1800) NAME 17 8 A DEPARTMENT 98 3 N NET 90 4 P 2 GROSS 94 4 P 2 DEDUCTIONS W 4 P 2 JOB INPUT PERSNL NAME MULTRPTS PRINT RPT1 DEDUCTIONS = GROSS - NET PRINT RPT2 IF DEPARTMENT = 911 PRINT RPT3 END-IF * > REPORT RPT1 TITLE 1 'REPORT ONE' LINE 1 NAME DEPARTMENT GROSS NET * > REPORT RPT2 SEQUENCE DEPARTMENT TITLE 1 'REPORT TWO' LINE 1 DEPARTMENT NAME GROSS NET DEDUCTIONS * > REPORT RPT3 CONTROL TITLE 1 'REPORT THREE - DEPT 911' LINE 1 NAME GROSS NET DEDUCTIONS
REPORT ONE (RPT1) produces a very simple listing of all employees. REPORT TWO (RPT2) gives the same information as REPORT ONE, but includes an additional column with the deductions printed. REPORT THREE (RPT3) produces a report that contains only information from department 911.
728
Multiple Reports
The PRINTER parameter of the REPORT statement directs the report's printed output to a file other than the system default output device (SYSPRINT/SYSLST). Such files must be defined in the library section by a FILE statement which also contains a PRINTER parameter. The REPORT statement must identify the appropriate file-name using the PRINTER parameter in the following format:
REPORT report-name [PRINTER file-name]
The following example shows a CA-Easytrieve/Plus program that produces two reports, each sent to separate printers.
FILE PAYFILE NAME 17 16 A ADDRESS 57 20 A STREET 37 20 A EMP-NUMBER 9 5 N * > FILE SPFORM PRINTER * JOB INPUT PAYFILE NAME MULT-PRINTERS IF EMP-NUMBER LE 12345 PRINT LABEL-REPORT PRINT NORM-REPORT END-IF * > REPORT LABEL-REPORT LABELS PRINTER SPFORM SEQUENCE EMP-NUMBER LINE 1 NAME LINE 3 STREET LINE 5 ADDRESS * > REPORT NORM-REPORT LINE 1 NAME ADDRESS EMP-NUMBER
The first report declaration produces a label report to a print output file designated SPFORM in the second file statement. This print file gets tied to a physical printer through your Job Control Language (JCL) statements. The second report declaration produces a standard report. It is output to the printer you normally use with other CA-Easytrieve/Plus programs (the default system output device).
Activity Section-Reporting
729
I I
You must code an END-PROC at the end of each procedure. You code the logic to execute in a report PROC the same way you code logic in a JOB activity. No input or output is permitted. Although you can code these procs in any order, you can only code each proc once per report.
I I
REPORT-INPUT. PROC The REPORT-INPUT. PROC permits final screening and modification of report input data. It is performed for each record selected for the report that contains the PROC.
I
You must execute a SELECT statement in the PROC to cause data to continue to the report. If a report was SEQUENCEd, this procedure is invoked after each record is output from the system sort.
730
REPORT-INPUT Example
Statements: FILE PERSNL %PERSNL TOT-NET S 5 P 2 PCT-NET-TO-TOT W 3 P 1 * JOB INPUT PERSNL NAME RPTINPT TOT-NET = TOT-NET + PAY-NET PRINT PCT-RPT * REPORT PCT-RPT LIMIT 20 SEQUENCE BRANCH EMP# CONTROL FINAL NOPRINT BRANCH NOPRINT TITLE 1 'EXAMPLE OF REPORT-INPUT PROC' LINE 1 BRANCH NAME EMP# PAY-NET PCT-NET-TO-TOT * > REPORT-INPUT. PROC PCT-NET-TO-TOT ROUNDED = PAY-NET / TOT-NET * 100 SELECT END-PROC Produce: 9/06/85 BRANCH 1 EXAMPLE OF REPORT-INPUT PROC EMPLOYEE NAME BRANDOW LYDIA HUSS PATTI WIMN GLORIA NAGLE KRUSE BERG POWELL PETRIK CORNING DENNING FORREST MCMAHON MANHART POST ARNOLD LARSON BYER TALL VETTER LOYAL MARY MAX NANCY CAROL KATHY GEORGE RALPH BILL BARBARA VIRGINIA JEAN LINDA RODNEY JULIE ELAINE DENISE NED EMPLOYEE NUMBER 02200 11376 12267 00370 03571 11473 11710 00577 02688 02765 03416 04234 11602 00445 01963 11357 11467 11931 01895 04225 NET PAY 554.31 223.71 251.65 340.59 182.09 547.88 167.96 154.70 103.43 109.60 13.19 283.19 250.89 206.60 356.87 215.47 259.80 355.19 189.06 230.50 PAGE 1
PCT-NET-TO-TOT 4.4 1.8 2.0 2.7 1.5 4.4 1.3 1.2 .8 .9 .1 2.3 2.0 1.7 2.9 1.7 2.1 2.8 1.5 1.8
Activity Section-Reporting
731
BEFORE-BREAK. PROC The BEFORE-BREAK. PROC permits modification of totals and special annotation before total line printing caused by the CONTROL statement. You can test a system-defined field named LEVEL to determine the appropriate break:
LEVEL = 1 = 2 = N (N for minor break for next break + 1 for final totals. is the number of control fields)
BEFORE-BREAK Example
Statements: FILE PAYROLL EMP# 9 5 N HEADING ('EMPLOYEE' 'NUMBER') NET 90 4 P 2 HEADING ('NET' 'PAY') DEPT 98 3 N GROSS 94 4 P 2 HEADING ('GROSS' 'PAY') DED W 3 P 2 PCT W 4 N 2 JOB INPUT PAYROLL NAME CORRECT-PCT IF DEPT = 911 914 921 DED = GROSS - NET PCT = DED / GROSS * 100 PRINT PCT-REPORT END-IF REPORT PCT-REPORT LINESIZE 73 SEQUENCE DEPT CONTROL FINAL NOPRINT DEPT NOPRINT TITLE 1 'THIS REPORT WILL ILLUSTRATE USE OF' TITLE 2 'BEFORE-BREAK PROCEDURE' LINE DEPT EMP# GROSS NET DED PCT > BEFORE-BREAK. PROC PCT = DED / GROSS * 100 IF LEVEL = 1. * DEPT TOTALS DISPLAY SKIP 1 'DEPARTMENT ' DEPT POS 3 GROSS POS 4 NET + POS 5 DED POS 6 PCT DISPLAY SKIP 1 END-IF IF LEVEL = 2. * FINAL TOTALS DISPLAY SKIP 1 'FINAL' POS 3 GROSS POS 4 NET + POS 5 DED POS 6 PCT END-IF END-PROC
732
Produce: 8/20/85 THIS REPORT WILL ILLUSTRATE USE OF BEFORE-BREAK PROCEDURE EMPLOYEE NUMBER 00445 11710 11357 01963 09764 04589 05805 03890 12461 12829 01730 03571 911 07231 08262 10961 11602 00185 914 00577 11376 05482 921 GROSS PAY 292.00 243.24 283.92 445.50 121.95 313.60 174.15 386.40 313.60 365.60 315.20 242.40 3,497.52 1,004.00 376.00 399.20 344.80 279.36 2,403.36 220.80 360.80 183.75 765.35 6,666.23 NET PAY 206.60 167.96 215.47 356.87 96.64 229.69 134.03 272.53 219.91 238.04 202.43 182.09 2,522.26 685.23 215.95 291.70 250.89 189.06 1,632.83 154.70 223.71 141.47 519.88 4,674.97 PAGE 1
DEPT 911
DED 85.40 75.24 68.45 88.63 25.31 83.91 40.12 113.87 93.69 127.56 112.77 60.31 975.26 318.77 160.05 107.50 93.91 90.30 770.53 66.10 137.09 42.28 245.47 1991.26
PCT 29.24 30.93 24.10 19.89 20.75 26.75 23.03 29.46 29.87 34.89 35.77 24.88 27.88 31.75 42.56 26.92 27.23 32.32 32.06 29.93 37.99 23.00 32.07 29.87 < < <
DEPARTMENT 914
DEPARTMENT 921
DEPARTMENT FINAL
The BEFORE-BREAK. PROC caused the DEPARTMENT annotation at each of the breaks and modified the total in PCT to be the percent, based on total amounts.
Activity Section-Reporting
733
AFTER-BREAK. PROC You can use an AFTER-BREAK procedure to produce special annotation on control reports. The value of LEVEL (a system-defined field) can determine which control break is processed. In the following example, the total line for the second control field ZIP receives special annotation.
AFTER-BREAK Example
Statements: FILE FILE1 CARD LAST-NAME 1 5 A STATE 6 2 A ZIP 8 5 N PAY-NET 13 5 N 2 JOB INPUT FILE1 NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 + SUMMARY SUMCTL DTLCOPY SEQUENCE STATE ZIP LAST-NAME CONTROL STATE ZIP LINE 01 LAST-NAME STATE ZIP PAY-NET * AFTER-BREAK. PROC IF LEVEL EQ 2 DISPLAY 'TOTALS FOR THE STATE OF ' STATE END-IF END-PROC * END BROWNIL6007612345 BROWNIL6007667890 JONESIL6007709876 JONESIL6007754321 SMITHTX7521811111 SMITHTX7521866666 Produce: LAST-NAME BROWN JONES STATE ZIP 60076 60077 PAY-NET 802.35 641.97 1444.32 777.77 777.77 2222.09
75218
734
ENDPAGE. PROC An ENDPAGE procedure can produce page footing information. It is invoked whenever end-of-page is detected. It typically produces page totals or other annotations, as in the following example of page footer annotation:
ENDPAGE Example
FILE FILE1 CARD LAST-NAME 1 5 A STATE 6 2 A ZIP 8 5 N PAY-NET 13 5 N 2 JOB INPUT FILE1 NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 + SUMMARY SUMCTL DTLCOPY SEQUENCE STATE ZIP LAST-NAME CONTROL STATE NEWPAGE ZIP TITLE 'REPORT FOR THE STATE OF' STATE LINE 01 LAST-NAME STATE ZIP PAY-NET * ENDPAGE. PROC DISPLAY SKIP 2 '* CONFIDENTIAL - FOR INTERNAL USE ONLY *' END-PROC * END BROWNIL6007612345 BROWNIL6007667890 JONESIL6007709876 JONESIL6007754321 SMITHTX7521811111 SMITHTX7521866666
Activity Section-Reporting
735
TERMINATION. PROC A TERMINATION procedure is invoked at the end of the report. This procedure can print report footing information, including control totals and distribution information. The following is an example of report footing:
TERMINATION Example
FILE FILE1 CARD LAST-NAME 1 5 A STATE 6 2 A ZIP 8 5 N PAY-NET 13 5 N 2 TOTAL-NET S 8 N 2 JOB INPUT FILE1 NAME MYPROG TOTAL-NET = TOTAL-NET + PAY-NET PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 + SUMMARY SUMCTL DTLCOPY SEQUENCE STATE ZIP LAST-NAME CONTROL STATE NEWPAGE ZIP TITLE 'REPORT FOR THE STATE OF' STATE LINE 01 LAST-NAME STATE ZIP PAY-NET * TERMINATION. PROC DISPLAY NEWPAGE DISPLAY SKIP 5 TOTAL-NET 'IS THE Y-T-D COMPANY NET PAY' DISPLAY SKIP 5 'PLEASE ROUTE THIS REPORT TO CORPORATE OFFICERS' END-PROC * END BROWNIL6007612345 BROWNIL6007667890 JONESIL6007709876 JONESIL6007754321 SMITHTX7521811111 SMITHTX7521866666
BEFORE-LINE. PROC and AFTER-LINE. PROC A BEFORE-LINE procedure is invoked immediately before, and an AFTER-LINE procedure immediately following, the printing of each detail line. Note: When using a BEFORE-LINE/AFTER-LINE procedure, the detail line for the report is already created. You cannot modify the contents of the detail line through the BEFORE-LINE/AFTER-LINE procedures. A BEFORE-LINE/AFTER-LINE procedure is commonly used to print an annotation before/after a detail line on the report.
736
BEFORE-LINE/AFTER-LINE Example
The following example illustrates how an AFTER-LINE procedure can print information following a detail line of a report:
Statements: FILE FILE1 CARD LAST-NAME 1 5 A STATE 6 2 A ZIP 8 5 N PAY-NET 13 5 N 2 JOB INPUT FILE1 NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINESIZE 65 + DTLCTL EVERY SEQUENCE STATE ZIP LAST-NAME CONTROL STATE ZIP LINE 01 LAST-NAME STATE ZIP PAY-NET * AFTER-LINE. PROC IF PAY-NET GE 500 DISPLAY '* EMPLOYEE ' LAST-NAME ' + EXCEEDED WEEKLY SALARY GOAL *' END-IF END-PROC * END BROWNIL6007612345 BROWNIL6007667890 JONESIL6007709876 JONESIL6007754321 SMITHTX7521811111 SMITHTX7521866666 Produce: LAST-NAME STATE ZIP PAY-NET
BROWN IL * EMPLOYEE BROWN EXCEEDED WEEKLY BROWN IL IL JONES IL * EMPLOYEE JONES EXCEEDED WEEKLY JONES IL IL IL SMITH TX * EMPLOYEE SMITH EXCEEDED WEEKLY SMITH TX TX TX
60076 678.90 SALARY GOAL * 60076 123.45 60076 802.35 60077 543.21 SALARY GOAL * 60077 98.76 60077 641.97 1444.32 75218 666.66 SALARY GOAL * 75218 111.11 75218 777.77 777.77 2222.09
Activity Section-Reporting
737
738
Chapter
Macros
Introduction
Very often, programs used at the same site share certain attributes. There can be a common logic routine or, even more likely, common file and field definitions shared by many programs. To help you avoid the need for duplicated effort, CA-Easytrieve/Plus provides an easy to use, full feature macro facility. This chapter describes the use of macros in CA-Easytrieve/Plus. In it you find:
Reading 1
I I
Reading 2
I I
Reading 3
I
Macros
81
Using Macros
Using Macros
What is a CA-Easytrieve/Plus Macro?
A macro is really just a chunk of a CA-Easytrieve/Plus program and usually, this chunk has a very specific purpose. You can store any piece of any CA-Easytrieve/Plus program you write that you want to use again in other programs in a macro library as a macro. When you want to use it in a program, you just put the name of the macro (preceded by a percent sign) in the place in your program where you need the code you stored. This means that you only have to type one line instead of retyping all of the lines that make up your macro.
Invoking Macros
Assuming that someone at your site has already created some macros and stored them in a macro library, you can easily invoke them in your program. To illustrate macro use, the following example shows all of the field definitions for a file called PERSNL (which we used in many of the examples in this guide). It consists of 34 lines of code. If, however, it were stored as a macro, you would only need to type in one line in any of your programs that access the PERSNL file to invoke the field definitions shown.
82
Using Macros
PERSNL File Field Definitions The following field definitions describe fields in the PERSNL file used in many examples in this guide.
REGION BRANCH SSN 1 2 4 1 N 2 N 5 P 5 20 8 12 39 20 12 2 5 4 4 3 6 N A A A A A A A N P 2 P 2 N N MASK '999-99-9999' HEADING('SOCIAL' 'SECURITY' 'NUMBER') HEADING('EMPLOYEE' 'NUMBER') HEADING 'EMPLOYEE NAME' HEADING('LAST' 'NAME') HEADING('FIRST' 'NAME') HEADING 'STREET' HEADING 'CITY' HEADING 'STATE' HEADING('ZIP' 'CODE') HEADING('NET' 'PAY') HEADING('GROSS' 'PAY') MASK(Y 'Z9/99/99') HEADING('DATE' 'OF' 'BIRTH') MASK '(999) 999-9999' HEADING('TELEPHONE' 'NUMBER') HEADING('SEX' 'CODE') 1 - FEMALE 2 - MALE HEADING('MARITAL' 'STATUS') M - MARRIED S - SINGLE HEADING('JOB' 'CATEGORY') HEADING('SALARY' 'CODE') MASK Y HEADING('DATE' 'OF' 'HIRE')
EMP# 9 NAME 17 NAME-LAST NAME NAME-FIRST NAME +8 ADDRESS 37 ADDR-STREET 37 ADDR-CITY 57 ADDR-STATE 69 ADDR-ZIP 71 PAY-NET 90 PAY-GROSS 94 DEPT 98 DATE-OF-BIRTH 103 TELEPHONE SEX MARITAL-STAT JOB-CATEGORY SALARY-CODE DATE-OF-HIRE 117 127 128 132 134 136
10 N 1 N 1 A 2 N 2 N 6 N * * * *
Once stored in a macro, you can pull all of the field definitions for PERSNL into your programs with one line of code. Assuming the PERSNL field definitions were stored as a macro named PERSNL, here is an example of a program where the macro is invoked.
> FILE PERSNL FB (150 1800) %PERSNL JOB INPUT PERSNL NAME FIRST-PROGRAM PRINT PAY-RPT REPORT PAY-RPT LINESIZE 80 TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT NAME EMP# GROSS
The statement %PERSNL brings all of the field definitions (stored as a macro) for the PERSNL file into your program. You can see what a saving of effort this provides you if you had several programs that all accessed the PERSNL file.
Macros
83
Using Macros
Macro Invocation Statement The macro invocation statement consists of a macro name preceded by a percent (%) sign and followed by an optional subtype for use with DOS Source Statement Libraries. Its format is:
%macro-name [.subtype]
%macro-name
Macro-name is the name of a previously stored macro that you want to invoke.
.subtype
For VSE users of Source Statement Libraries, subtype is an optional one-character subtype for an SSL member. It is delimited from the macro-name (book name) with a period ( . ). If subtype is not coded, the default subtype is taken from the CA-Easytrieve/Plus options table (see Appendix C of the CA-Easytrieve/Plus Reference Guide). The default subtype for macros stored in Source Statement Libraries is Z. Macro Nesting CA-Easytrieve/Plus treats a macro invocation statement that is in the body of a macro (nested) as if it were outside of the macro. That is, no special consideration is necessary. There is no limit to the nesting level. END OF FIRST READING If You completed the tutorial You branched to this section from the tutorial Then continue with Chapter 9, Programming Techniques Lesson 6 of Chapter 3, Standard Reporting with CA-Easytrieve/Plus
84
Defining Macros
Macros are composed of three parts:
I I
The macro prototype statement defines the macro and its parameters. The macro body contains the CA-Easytrieve/Plus statements that are generated when the macro is invoked. The optional macro termination command ends the macro.
The name of a macro is the same as the member name (the name of the macro as it is stored) in the macro storage library. The following example shows the structure of a macro: Prototype Statement: Body:
MACRO
********************************************************** * * * NAME: MACRO EXAMPLE * * * * FUNCTION: DEFINES FIELDS IN THE PERSNL FILE. * * * ********************************************************** NAME 17 20 A HEADING 'EMPLOYEE NAME' EMP# 9 5 N HEADING ('EMPLOYEE' 'NUMBER') DEPT 98 3 N GROSS 94 4 P 2 HEADING ('GROSS' 'PAY')
MEND
Prototype Statement The prototype statement must be the first statement of a macro. It optionally defines the parameters of the macro. Its most basic format is:
MACRO
Macros
85
Macro Body The macro body consists of a series of model and actual CA-Easytrieve/Plus statements. The model statements contain one or more parameters that are replaced by the values of corresponding parameters on the prototype statement (described later in this chapter). Macro Termination Command The optional macro termination command is used at the end of a macro. (When storing macros in VSE Source Statement Libraries, its use is required.) The format of the macro termination statement is:
MEND
Storing Macros
Macro statements are stored and maintained in a macro library. The MACRO entry in the CA-Easytrieve/Plus options table (see Appendix C of the CA-Easytrieve/Plus Reference Guide) specifies the macro library storage access method. The types of access methods are: Term PAN PDS SSL USER Description Macros stored in a CA-Panvalet library and maintained through CA-Panvalet utilities. (OS/390 only) Macros stored in a partitioned data set. (VSE only) Macros stored in a VSE Source Statement Library. SSLs are maintained by using a variety of VSE utilities. Any user-supplied library facility that you can use for the macro library.
VSAM A specially formatted VSAM data set that you can use as the macro library. Macros are maintained using a special CA-Easytrieve/Plus program. END OF SECOND READING Please turn to chapter 9, Programming Techniques.
86
3.
Positional Parameters
Positional parameters are values that are assigned in the macro according to their position on the macro prototype statement and on the macro invocation statement. They are useful when a value is always required for the parameters each time the macro is invoked. Since there is no default value for these parameters, their value must be supplied at the time of invocation. Generally, you are always required to supply some value. (In some cases, CA-Easytrieve/Plus gives the value of a null string to an unsupplied positional parameter.) Frequently-used parameters are often coded as positional, since you need to code only the value of the parameter when invoking the macro (keyword parameters require a keyword name and a value).
Macros
87
Keyword Parameters
Keyword parameters are values that are assigned in the macro according to a keyword name associated with the value. Keyword parameters are used:
I
To help keep track of a large number of parameters (since they require keyword names that can be descriptive). For optionally used parameters (since they enable default values).
Prototype Statement
Positional and keyword parameters appear on the prototype statement according to the following format:
[ ] MACRO [literal][positional-] [parameter- ] [name ] [ ] [ [keyword[parameter[name [ ] default-] ... value ] ] ]
[literal]
Literal lets CA-Easytrieve/Plus distinguish where positional parameters end and keyword parameters begin on the statement. Replace literal with an integer specifying the number of positional parameters on the prototype statement. This parameter is required only when you use keyword parameters. When you specify only keyword parameters on the prototype statement, you must code a zero (0) as the value for literal.
[positional-parameter-name]
This is a descriptive name for the parameter. You must code positional parameters before any keyword parameters. Positional values are substituted according to their position on the prototype statement.
[keyword-parameter-name default-value]
Keyword parameters have two parts: the keyword name and the default value. The keyword name identifies the parameter; the default value is the value CA-Easytrieve/Plus uses when no value is specified in your program on the invocation statement. Prototype Statement Parameter Examples The following examples show some typical prototype statements with both positional and keyword parameters.
88
This example shows only positional parameters of the prototype statement (named POS1 and POS2). Note: The number of positional parameters is not indicated. You could have optionally coded the number of positional parameters as '2', but it is not required because no keyword parameters are present.
MACRO ... ... POS1 POS2
This example shows only keyword parameters on the prototype statement. Keyword parameters consist of the keyword name and a default value, such as KEY1 and VALUE1. The number of positional parameters is coded as zero, which is required when you use only keyword parameters.
MACRO ... ... 0 KEY1 VALUE1 KEY2 VALUE2
Macros with both positional and keyword parameters require that you supply positional parameters first and the number of positional parameters (in this case, 1).
MACRO 1 ... ... POS1 KEY1 VALUE1
[positional-parameter-value]
This is the value that is substituted for the substitution word in the body of your macro. It is position dependent and is assigned according to the location of the positional-parameter-name on the MACRO prototype statement. This value shows up in the compile listing of your program.
Macros
89
[keyword-parameter-name keyword-parameter-value]
The keyword parameter name is the descriptive name that identifies the parameter and ties it to a keyword parameter name on the MACRO prototype statement. The keyword parameter value is the value you are giving the parameter, which is then substituted for the substitution word in the body of your macro. This value shows up in the compile listing of your program. If the keyword parameter name is specified, then a keyword parameter value must also be given and vice versa. If neither is specified, then the default value, defined on the MACRO prototype statement, is used.
These are descriptive names for file name, file type, and file format. By entering values for these parameters on the macro invocation statement, you provide the substitution words in the macro body (&NAME, &TYPE, &FORMAT) with their content.
Macro Prototype Statement and Macro Body
The first line contains the prototype statement and positional parameters. The second line is the source code or body of the macro, with substitution words that receive their values from the invocation statement. This line is what is called into your program.
MACRO NAME TYPE FORMAT FILE &NAME &TYPE &FORMAT
810
The invocation statement shown below is what you code in your program to invoke the macro (FILEDEF) into your program. Also, it provides three values for the positional parameters shown above.
%FILEDEF TESTIN ' ' 'FB(150 1800)'
The value TESTIN is substituted for &NAME and the value FB(150 1800) is substituted for &FORMAT. The second value is simply a blank character string that is a necessary way of giving the positional parameter &TYPE no value at all.
Resulting Code On Compile Listing
The following line of code is generated after all substitution takes place. This line of code appears on the compile listing of your program.
FILE TESTIN FB(150 1800)
Usually, positional parameters require that a value always be given on the macro invocation statement. If you do not need to use a particular positional parameter, you must code a blank character string (' ') as its value. Note: Any single parameter that has components separated by a delimiter (such as a space) must be surrounded by single quotes. Keyword Parameters In this example, keyword parameters perform the same task as in the previous example. Unlike positional parameters, keyword parameters are capable of providing a default value if no value is coded on the macro invocation statement. You must provide default values on the macro prototype statement for each keyword name. You can use a blank character string (' ') as the default value, which simply substitutes no entry if no value is coded on the macro invocation statement.
Macro Prototype Statement and Macro Body
The first line contains the prototype statement and keyword parameters. The second line is the source code or body of the macro, with substitution words that receive their values from the invocation statement. This line is what is called into your program.
MACRO 0 NAME FILEA TYPE ' ' FORMAT 'FB(150 1800)' FILE &NAME &TYPE &FORMAT
Macros
811
The invocation statement shown below invokes the macro named FILEDEF into your program. It also provides three values for the keyword parameters shown above.
%FILEDEF NAME TESTIN TYPE VIRTUAL FORMAT 'V(1000)'
The following line of code is what is generated after all substitution takes place. This line of code appears on the compile listing of your program.
FILE TESTIN VIRTUAL V(1000)
You do not have to specify keywords in the same order on the macro invocation statement as on the macro prototype statement.
812
Instream Macros
MACRO Prototype Statement and Macro Body MACRO NAME PREFIX FILE &NAME &PREFIX.-SSN 1 9 &PREFIX.-MAIL 10 75
N A
Resulting Code On Compile Listing ... FILE TESTIN NEW-SSN 1 NEW-MAIL 10 ...
9 75
N A
Instream Macros
You can also include macro statements directly in your CA-Easytrieve/Plus program. This capability is particularly useful for testing new macros before storing them in the macro library. When an instream macro has the same name as a macro in the library, the instream macro is used.
Macros
813
Instream Macros
Instream macros are placed at the beginning of the source input. Each instream macro is bounded by an MSTART and MEND statement. The format of these statements is:
MSTART macro-name MACRO 2 NUMBER RESULT **************************************************************** * * * NAME: MACRO EXAMPLE * * CALCULATE THE CUBE OF A NUMBER * * * * FUNCTION: THIS MACRO CALCULATES THE CUBE OF A NUMBER. * * * **************************************************************** DEFINE CUBE_NUMBER_ S 6 N VALUE 00000 CUBE_NUMBER_ = &NUMBER * &NUMBER * &NUMBER &RESULT = CUBE_NUMBER_ MEND
Operation
macro-name
Macro-name is the name of the macro. It can be from one to eight characters long. The first character must be alphabetic. END OF THIRD READING Please turn to chapter 9, Programming Techniques.
814
Chapter
Programming Techniques
Introduction
This chapter describes some CA-Easytrieve/Plus features used for debugging programs and also lists some system-defined fields you can access in your programs to do advanced programming and customization. In this chapter, you find:
Reading 1
I
Reading 2
I I I
Reading 3
I
System-defined fields
Abnormal Termination
Most programming errors fall into two categories: 1. 2. Syntax errors Execution errors.
When CA-Easytrieve/Plus encounters a syntax error, it prints diagnostic messages that pinpoint the error, and then terminates after completing the compilation of the entire program. When CA-Easytrieve/Plus encounters an execution error, it prints a diagnostic message for the error and terminates immediately.
Programming Techniques
91
Abnormal Termination
Diagnostic Messages
Syntax Errors Most of the errors made in programming are syntax errors relating to clerical mistakes or a misunderstanding of the language. The simple syntax rules and logical program structure of CA-Easytrieve/Plus nearly eliminate these errors. To pinpoint violations, CA-Easytrieve/Plus provides an extensive set of diagnostic messages (see Appendix A of the CA-Easytrieve/Plus Reference Guide).
Diagnostic Format
When CA-Easytrieve/Plus detects syntax errors in the program source code, an error message with the following format is printed:
(A) (B) (C)
-----------------------------------------------2*******B055 INVALID LENGTH, TYPE OR DECIMAL PLACES - 1
This message prints directly below the statement in error in the statement listing and has the following components: A. Number of the statement where the error occurred. B. Seven asterisks to bring attention to the error. C. Diagnostic message. Execution Errors You can also encounter execution errors, most of which are easily remedied. Some of the execution errors that CA-Easytrieve/Plus intercepts include:
I I I
Statement Listing Input to the CA-Easytrieve/Plus compiler is listed one record per line. The line consists of a CA-Easytrieve/Plus generated statement number (A), followed by the input record (B). If the input is from a macro, '-macroname' (C) is appended to the line.
92
Abnormal Termination
(C)
-DATADEF -DATADEF -DATADEF -DATADEF
16
N EMP#
BRANCH
END OF FIRST READING If You completed the tutorial You branched to this section from the tutorial Then continue with Chapter 4, Library Section-Describing and Defining Data Chapter 4, Library Section-Describing and Defining Data
We deferred any further mention of the environment section until now because it is entirely optional. The environment section of a CA-Easytrieve/Plus program consists of only one statement, PARM. The PARM statement has several parameters, all of which are optional. Most parameters of the PARM statement have default values that are set in the System Options Table at the time CA-Easytrieve/Plus is installed on your system. (System options are listed in Appendix C of the CA-Easytrieve/Plus Reference Guide.) When defaults are satisfactory for achieving the results you want, you do not need to code the PARM statement. However, if you prefer to override pre-determined system options, you can do it with the PARM statement.
Programming Techniques
93
Abnormal Termination
Syntax
PARM statement parameters useful in the program debugging process have the following format:
PARM + { SNAP } ] {NOSNAP} ] { NO } ] + [ ] [ DMAP ] [NODMAP] [ ] [ ] [ FLDCHK ] [NOFLDCHK] [ ] [ ] [FLOW ] [FLOWSIZ literal-1] + [NOFLOW] [ ] [ [ABEXIT [
{ }] ] {LONG }] ] {SHORT}] )] { }] ]
[ ] ( [ FILE ] [NOFILE] [ ]
[ ] ] [ PARM ] ) ] [NOPARM] ] [ ] ]
ABEXIT indicates the level of control exercised over program interrupt codes 1 through 11 (see the appropriate Principles of Operation guide for information on these codes).
I
SNAP prints a formatted dump of CA-Easytrieve/Plus storage areas with an error analysis report. NOSNAP prints only an error analysis report. NO inhibits CA-Easytrieve/Plus interception of program interrupts.
I I
DEBUG
DEBUG and its subparameters control generation of certain system outputs. These outputs analyze programming errors that cause abnormal execution termination. Subparameters prefixed with NO inhibit the named operation.
CLIST
CLIST creates a condensed listing of the executable program produced by the compiler.
PMAP
PMAP creates a complete listing of the executable program produced by the compiler. CLIST and PMAP are mutually exclusive subparameters.
94
Abnormal Termination
DMAP
DMAP creates a listing of the data map for each file and its associated fields.
FLDCHK
FLDCHK validates all data references during program execution. A data reference is invalid if a field-name was referenced in a file that had no active record. Invalid references, that is, data reference after end-of-file, might otherwise cause a program interruption or incorrect program results.
FLOW
FLOW activates a trace of the statements being executed. The statement numbers print in the associated analysis report during an abnormal termination.
FLOWSIZ literal-1
FLOWSIZ establishes the number of entries in the trace table for the flow option. Literal-1 is a numeric value from 1 to 4096.
STATE
STATE saves the statement number of the statement currently executing. The statement number is then printed in the associated abnormal termination messages.
XREF
XREF creates a cross reference listing of each field name, file name, procedure name, segment name, report name, and statement label.
I
LONG implies that entries are listed, even though they are not referenced. SHORT lists only referenced entries.
LIST
LIST controls the printing of certain system outputs. Subparameters prefixed with NO inhibit the named operation.
FILE
FILE prints file statistics at the end of each JOB or SORT activity.
PARM
PARM prints system parameters at the conclusion of the syntax check operation.
Programming Techniques
95
System-Defined Fields
PARM Examples The following examples illustrate typical uses of the PARM statement:
PARM for production ... PARM LINK(MYPROG) DEBUG(CLIST, PMAP, DMAP) + SORT (MSG (ALL, PRINTER)) FILE PERSNL FB(150 1800) %PERSNL JOB INPUT PERSNL NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINE NAME DEPT PARM for program testing ... PARM ABEXIT (SNAP) + DEBUG (PMAP, DMAP FLDCHK, FLOW, + FLOWSIZ (20), STATE) VFM (10) FILE PERSNL FB(150 1800) %PERSNL JOB INPUT PERSNL NAME MYPROG PRINT REPORT1 * REPORT REPORT1 LINE NAME DEPT SALARY-CODE
END OF SECOND READING Please turn to Chapter 4, Library Section-Describing and Defining Data.
System-Defined Fields
YOU ARE NOW STARTING READING 3 OF CHAPTER 9 System-defined fields are fields that CA-Easytrieve/Plus automatically defines and maintains internally. You can access these fields in your program to retrieve data that can be useful in processing or certain types of error trapping. CA-Easytrieve/Plus provides three categories of system-defined fields:
I I I
96
System-Defined Fields
SYSDATE is a read only eight-byte alphanumeric field that contains the system date at the start of CA-Easytrieve/Plus execution. The DATE option of the Options Table (see your CA-Easytrieve/Plus Reference Guide) determines the format of the date. A slash (/) separates the month, day, and year components of the date; for example, MM/DD/YY.
SYSTIME
SYSTIME is a read only eight-byte alphanumeric field that contains the system time at the start of CA-Easytrieve/Plus execution. A slash (/) separates the data into hours, minutes, and seconds; for example, HH/MM/SS.
RETURN-CODE
RETURN-CODE is a four-byte binary field whose contents are returned to the operating system in register 15 when CA-Easytrieve/Plus terminates. RETURN-CODE is initialized to zero, but you can set it to any value. RETURN-CODE applies only to OS/390 systems.
RECORD-LENGTH is a two-byte binary field with zero decimal places used for all file types to determine or establish the length of the current data record. For variable-length records, this field contains only the length of the record's actual data.
RECORD-COUNT
RECORD-COUNT is a read-only four-byte binary field with zero decimal places that contains the number of logical I/O operations performed on a file.
FILE-STATUS
FILE-STATUS is a read-only field that contains the results of the most recent I/O operation on a file.
Programming Techniques
97
System-Defined Fields
TALLY contains the number of detail records that comprise a control break. You can use TALLY on a LINE statement or you can use it in calculations in report procedures. TALLY is commonly used to determine averages for a control level. TALLY is a ten-byte packed decimal field with zero decimal places. This definition is used for calculations contained in report procedures. The TALLYSIZE parameter of the REPORT statement defines the number of digits that are printed for TALLY. A TALLY accumulator is created for each control break level.
LEVEL
LEVEL is a system-defined field provided for determining which control break is currently active:
I I
The field is defined as a two-byte binary field. The value in LEVEL indicates the control break level and varies from 0 to n, based on the number of field names on the CONTROL statement of the associated report.
LEVEL contains the logical position number of the controlling field name. This value also applies to FINAL, whether it is coded or not.
LEVEL Example
LEVEL = 1 on TERRITORY breaks. LEVEL = 2 on REGION breaks. LEVEL = 3 on AREA breaks. LEVEL = 4 final break. CONTROL FINAL 4 NOPRINT REGION 2 AREA 3 REGION 2 TERRITORY 1
CONTROL AREA 4 3
TERRITORY 1
98
Index
A
Abnormal termination, 9-1 Access to levels, 7-32 Activities JOB, 2-9 SORT, 2-10 Activity definition section, 2-9, 3-7 Addition, 5-7 AFTER-BREAK procedure, 7-34 AFTER-LINE procedure, 7-36 Alphabetic literals, 4-5 Ampersand in macros, 8-13 Arithmetic operations, 5-7 Arithmetic operators, 4-6, 5-3 Assignment statement, 5-8 Asterisk arithmetic operator, 4-6 to designate comments, 4-2 Automatic input and output, 6-2 Automatic input using the JOB statement, 5-2, 6-2 Automatic totals on reports, 3-21, 7-10
Blank When Zero (BWZ), 3-16 Blocksize, 3-3 Branching, 5-12 Breaks, control, 3-21, 7-10 BWZ, 3-16, 4-11
C
CA-Easytrieve Plus benefits, 2-4 keywords, 4-4 program structure, 2-9 syntax rules, 4-2 words, 4-3 Calculations, 5-7 Column headings on reports, 3-16, 7-13 Comments, 4-2 Comparing against a range of values, 5-3 Comparing field values, 5-3 Conditional expressions, 3-9, 5-3 arithmetic operators, 5-3 combining, 5-6 comparing two fields, 5-3 IF/ELSE, 5-4 Continuation characters, 4-3
B
BEFORE procedure with SORT, 5-15 BEFORE-BREAK procedure, 7-32 BEFORE-LINE procedure, 7-36
Control breaks, 3-21, 7-10, 7-12 access to levels, 2-6 overriding totals with SUM, 7-11 Control field values in titles, 7-12 CONTROL statement, 3-21, 7-10
Index1
COPY statement, 4-21 Copying edit masks, 3-16, 4-11 Creating and storing macros, 8-5 Customizing column headings, 3-16, 7-13
Dollar signs, 3-15 DTLCOPY parameter, 7-25 DTLCTL (detail control) parameter, 7-20 duplicating field definitions, 4-21
D
Data definition, 3-3, 4-6, 4-7, 4-8, 4-9, 4-10, 4-11, 4-12, 4-13 Data types, 3-5, 4-9 Decimal positions, 3-5, 3-6, 4-9 Declarative statements, reporting, 3-19, 7-9 DEFINE statement, 3-4, 4-8, 4-9 HEADING parameter, 3-16, 4-10 in an activity, 4-13 MASK parameter, 3-14, 3-15, 3-16, 4-10 DEFINE Statement RESET parameter, 4-17 Defining fields, 3-4, 4-6, 4-8, 4-9, 4-10, 4-12, 4-13 working storage, 3-10, 4-13, 4-15 Defining files, 3-3, 4-6 Defining report declaration, 3-13 Delimiters, 4-3 Describing files and fields, 4-6 Description (DESC), tables, 5-19 Detail lines on reports, 3-11, 3-24 Diagnosing an error, 3-27 Diagnostic errors statement listing, 9-2 Diagnostic messages execution errors, 9-2 syntax errors, 9-2 DISPLAY statement, 6-5 Division, 5-7 DO loops, 5-11 DO WHILE statement, 5-11 nesting example, 5-12 Documentation conventions, 1-3
E
Edit masks, 3-14, 4-10 decimals and commas, 3-15, 4-10 digits, 3-15, 4-10 dollar signs, 3-15, 4-10 high-order zeros, 3-15, 4-10 naming, 3-15, 4-11 rules of use, 3-15, 4-10 Editing report output, 4-10 Eeport procedures AFTER-LINE, 7-36 END-DO statement, 5-11 ENDPAGE procedure, 7-35 END-PROC keyword, 5-17 Environment definition section, 2-9, 9-3 Error messages, 3-27, 9-2 EXECUTE parameter, 5-13 Execution errors, 9-1, 9-2 EXIT parameter of FILE statement, 4-20 Exit routines, 4-20 Explicit redefinition of fields, 4-17 expressions conditional, 5-3 Expressions arithmetic, 5-7 conditional, 3-9
F
Field headings on reports, 3-16, 7-4 fields duplicating definitions using COPY, 4-21
Index2
Fields characteristics, 3-4 characteristics of, 4-8 data type, 3-5, 3-6, 4-9 decimal positions, 4-9 definition, 4-8, 4-9, 4-10, 4-12, 4-13 definition, 3-4 definition of, 4-6 edit masks, 4-10 headings on reports, 4-10 length, 3-5, 4-9 naming, 4-8 naming, 3-5 naming of, 4-4 qualifying, 4-4 redefinition, 4-17 start location, 4-8 static working storage, 4-15 working storage, 4-13 File directing parameters of REPORT, 7-29 FILE statement, 3-3, 4-7 EXIT parameter, 4-20 MODIFY parameter, 4-20 NR parameter, 4-20 user exit routines, 4-20 VIRTUAL parameter, 4-19 Files definition, 3-3 definition of, 4-6, 4-7 layout example, 4-6 Fixed blocked records, 3-3, 4-20 Floating dollar signs, 3-15, 4-10 Flowchart symbols, 2-3 Format determination parameters, 7-19 Format determination parameters of REPORT, 7-16 DTLCTL, 7-20 SUMCTL, 7-21 TAG, 7-24 FROM parameter, 6-8
H
HEADING parameter, 3-16, 3-17, 4-10 HEADING statement, 3-23, 7-13 Headings on reports, 3-23, 4-10, 7-4 Hexadecimal literals, 4-5 Hyphen arithmetic operator, 4-6 continuation character, 4-3
I
Identifiers, 4-6 IF statement, 3-9, 5-3 IF/ELSE, 5-4 special uses, 5-5 Initializing working storage, 4-17 INPUT parameter, 5-2 Input to a program, 6-2 automatic, 5-2, 6-2 controlled, 6-7 GET statement, 6-7 POINT statement, 6-9 READ statement, 6-10 Instream macros, 8-13 Instream tables, 5-20 INTEGER parameter, 5-8
J
JOB Activities, 5-2
G
GET statement, 6-7 GOTO statement, 5-12 Grand totals on reports, 3-21, 7-10
JOB activity, 2-10, 5-2 naming, 5-2 Job Control Language (JCL) statements, 7-29 JOB statement, 3-7, 5-2 INPUT parameter, 5-2 NAME parameter, 5-2
Index3
K
Keyword parameters, 8-8 Keyword parameters in macros, 8-7 Keywords, 4-4
conditional expressions, 5-3 loops, 5-11 moves, 5-10 Logical connectors, 5-6 Loops, 5-11
L
Label Reports, 7-15 Labels, 4-5 format, 7-15 Length of fields, 4-9 Length of print line on reports, 3-19, 7-5, 7-7 Lesson 1 Your First CA-Easytrieve Plus Report Program, 3-2 Lesson 2 Expanding Your First Report Program, 3-7 Lesson 3 Printing CA-Easytrieve Plus reports, 3-13 Lesson 4 Report Declarations, 3-18 Lesson 5: Making Your Job Easier with Macros, 3-25 Lesson 6: Diagnosing An Error, 3-27 Library definition section, 2-9, 4-6 Line groups on reports, 7-5 Line item positioning on reports, 7-5 LINE statement, 3-11, 3-24, 7-14 LINESIZE parameter of REPORT, 3-19, 7-7 Literals alphabetic, 4-5 hexadecimal, 4-5 numeric, 4-5 Logic, 3-8 logic in programs, 5-3 Logic in programs assignments, 5-8 branching, 5-12 calculations, 5-7
M
Macro invocation statement, 8-4 MACRO prototype statement, 8-5 parameter substitution, 8-8 Macros creating and storing, 8-5 definition, 8-2 instream, 8-13 invocation, 8-2 nesting of, 8-4 parameter substitution, 8-7 prototype statement, 8-5 termination command, 8-5 use, 3-25 Making your job easier with macros, 3-25 MASK parameter, 3-14, 4-10, 4-11 BWZ, 3-16, 4-11 MEND command, 8-6 minus sign, 4-6 MODIFY parameter, 4-20 MOVE statement, 5-10 Moving data, 5-10 Multiple parameters, 4-4 Multiple reports to a single printer, 7-28 to more than one printer, 7-29 Multiple statements on one line, 4-2 Multiplication, 5-7
N
NAME, 3-8 Naming a job activity, 5-2
Index4
Naming a JOB activity, 3-8 Naming edit masks, 3-16, 4-11 Naming of fields, 4-4 Naming reports, 3-19 Numeric literals, 4-5
Pre-printed forms, 2-6, 7-15 Print line, length, 3-19 Print line, length of, 7-7 PRINT statement, 3-13, 6-2 execution flow, 6-3 work file processing, 6-4 Printing detail lines on report, 3-11 Printing CA-Easytrieve Plus Reports, 6-2
O
Order of report definition statements, 3-19 Output DISPLAY statement, 6-5 PUT statement, 6-8 WRITE statement, 6-11 Output files implicit start locations, 4-19 Overlay redefinition of fields, 4-18 Overriding control break totals, 3-22, 7-11
PROC keyword, 5-17 Procedures nesting, 5-17 user defined, 5-16 Processing activities, 3-7, 5-2 Program examples, format of, 2-3 Program input, 3-7, 6-2 Program logic, 3-8, 5-3 assignments, 5-8 branching, 5-12 calculations, 5-7 conditional expressions, 5-3 loops, 5-11 moves, 5-10 Program termination, 5-13 Programming errors execution errors, 9-1 syntax errors, 9-1 Publications, CA-Easytrieve Plus, 1-2 PUT statement, 6-8
P
Parameter substitution in macros, 8-7 Parameters, multiple, 4-4 Parentheses in calculations, 5-7 to indicate group relationships, 4-4 PARM statement and system option table, 9-3 Percent symbol macro invocation, 3-25 Percent symbol, macro invocation, 8-4 Period concatenation in macros, 8-13 statement delimiter, 4-2 Plus sign arithmetic operator, 4-6 continuation character, 4-3 POINT statement, 6-9 Positional parameters, 8-7 Positional parameters in macros, 8-7
Q
Qualifying fields, 4-4
R
Random access processing, 6-10 READ statement, 6-10
Index5
Records definition, 3-4 fixed, blocked, 3-3, 4-20 length and type, 4-20 Redefining fields explicit redefinition, 4-17 overlay redefinition, 4-18 Report declaration, 3-13 Report declarations, 3-18 Report definition statements, 3-19, 7-9 CONTROL, 3-21, 7-9 HEADING, 3-23, 7-9 LINE, 3-24, 7-9 order, 3-19 SEQUENCE, 3-20, 7-9 SUM, 3-22, 7-9 TITLE, 3-22, 7-9 Report procedures AFTER-BREAK, 7-34 BEFORE-BREAK, 7-32 BEFORE-LINE, 7-36 ENDPAGE, 7-35 REPORT-INPUT, 7-30 TERMINATION, 7-36 Report procedures (PROCs), 7-30 Report processing, 7-6 REPORT statement, 3-19, 7-6, 7-7 format determination parameters, 7-16 LINESIZE, 3-19, 7-7 report name, 3-19 testing aid parameters, 7-18 Report subactivities, 2-10 REPORT-INPUT. PROC, 7-30 reports, 7-2 Reports annotating, 7-36 control breaks, 2-6, 3-21, 7-10 creation, 7-2 creation, 3-19 detail lines, 3-24, 7-2, 7-5 editing, 3-14, 4-10 headings, 3-23, 7-2 line groups, 7-2, 7-5 output, 2-6, 6-2 printing, 3-13 printing of, 6-2
procedures, 2-6 sorting, 3-20, 7-9 titles, 3-22, 7-2, 7-11 totals, 3-21, 7-10, 7-11 totals on, 7-10 RESET parameter of DEFINE statement, 4-17 RETAIN parameter of FILE statement, 4-20 ROUNDED parameter, 5-8 Rounding fractional values, 5-8 Routines exit, 4-20 Rules of syntax, 4-2
S
Search argument (ARG), 5-19 Sections of a program activity, 2-9, 3-7 environment, 2-9 library, 2-9, 3-3 SEQUENCE statement, 3-20, 7-9 Sequential file processing, 6-5 Size of print line on reports, 3-19, 7-5 Slash, division symbol, 4-6 SORT activity, 2-10 SORT statement, 5-14 procedures, 5-15 Sorting program input, 5-14 Sorting report data, 3-20, 7-9 Spacing control parameters of REPORT, 7-7 Special IF statements, 5-5 Stack a column, 4-10 Standard Reports, 7-2 START/FINISH procedures, 5-18 Starting position of fields, 4-8 Statement listing, 9-2
Index6
Statements area, 4-2 comment, 4-2 continued, 4-3 delimiters, 4-3 labels, 4-5 multiple, 4-2 Static working storage fields, 4-15 STATUS parameter, 6-9 STOP statement, 5-13 Structure of a CA-Easytrieve Plus program, 2-9 Subtraction, 5-7 SUM statement, 3-22, 7-11 SUMCTL (sum control) parameter, 7-21 Summary files, 7-26 SUMMARY reports, 7-25 Summing Things Up tutorial summary, 3-28 Suppressing zeros, 3-15, 3-16, 4-11 Syntax errors, 9-1, 9-2 Syntax rules, 4-2 System option table, 9-3 System-defined fields FILE-STATUS, 9-7 LEVEL, 9-8 RECORD-COUNT, 9-7 RECORD-LENGTH, 9-7 RETURN-CODE, 9-6 SYSDATE, 9-6 SYSTIME, 9-6 TALLY, 9-8
Temporary work files, 2-7, 4-20 Terminating program execution, 5-13 TERMINATION procedure, 7-36 Testing aid parameters, 7-18 TITLE statement, 3-22, 7-11 control field values in titles, 7-12 Titles on reports, 3-22, 7-3 Totals on reports, 3-21, 7-10 overriding with SUM, 3-22, 7-11 Tutorial, 3-1 lessons, 3-1
U
User Controlled Input and Output, 6-5 User defined procedures, 5-16 User exit routines, 4-20 User Guide structure, 2-1 Using macros, 8-2
V
Virtual file manager (VFM), 2-7 Virtual File Manager (VFM), 4-19 VIRTUAL parameter of FILE statement, 4-19
W
Words in a statement, 4-3 Work files establishing temporary work files with VFM, 4-20 Working storage, 3-10 initialization, 4-17 type S (static), 4-15 type W, 3-10, 4-13 WRITE statement, 6-11
T
Tables, 5-19 ARG, 5-19 DESC, 5-19 external, 5-21 instream, 5-20 SEARCH statement, 5-21 testing for a match, 5-21 TAG subparameter of SUMCTL, 7-24
Index7
X
Xontrol breaks overriding totals with SUM, 3-22
Z
Zero suppress, 3-15, 3-16, 4-11
Index8