You will become familiar with syntax associated with frequently used z/OS utility programs and commonly used programming languages.
Early challenges expose you to the flexibility of z/OS sort program utility and assumes you have no experience with program languages.
Code is provided exposing you to the syntax of various program languages.
The learning objective is to become familiar with the syntax of various program languages and how to compile and execute the various program languages. If you do not know how to program, then you might learn to have no fear of programming and even become comfortable with programming.
While many Information Technology jobs have no computer programming requirement, Information Technology professionals know their value and ability to contribute are enhanced by knowledge and familiarity with computer programming.
Part 3 intends to leave you with 5 "best practices" applied to application program development:
From ISPF panel
Execution of part3 routine allocated Z#####.P3.OUTPUT and wrote a single line into member #01
The basic skills acquired in Part 2 enabled you to complete the following task using abbreviated instructions
You broke the ice on Part 3 and you are ready for the next challenge
SORT utility has useful data processing capabilities beyond the obvious.
One objective of Part 3 is to never write a program when a system utility will accomplish a needed task.
Your objective is to develop a process to validate client records.
Validating client records is a real world data processing task.
Your assignment is to validate client records
You are new to the responsibility of validating another companies client master file.
A senior technician, Mister Peabody, is assigned to guide you. Let's call him Peabody for short.
Peabody has decades of experience and plans to retire. Peabody knows the ability to locate and use the professional documentation is critical to completing assignments. Peabody is unable to remember everything but he does remember where to find technical details needed to accomplish a task. When Peabody fails to remember details to accomplish a task, he will direct you to specific professional documentation.
NOTE: Whenever you see "Advice from Peabody" in Part 3, the information is extremely helpful.
Peabody tells you about a "toolbag" of JCL used to execute system utilities and special programs to validate record layouts.
Peabody tells you the SORT utility can identify duplicate records using a specific control statement,
SUM FIELDS=NONE.
Peabody mentioned the layout is a simple client master file layout with defined field types to help quickly identify duplicate records.
The Unique Account Number can be used to identify duplicate records.
-- A client may have multiple account numbers.
-- A duplicate account number is a data problem.
Note: The challenge uses a small BBRI master file but the file could easily be 45 million records.
Peabody wants you to report back to him the total duplicate unique account numbers found in BBRI master file.
You are given the following details to get the information Peabody requested:
You report the number of total duplicate unique account numbers found to Peabody.
Peabody responds, when duplicate records are found the business analysts need more information.
You must provide a special report about the duplicate records.
Peabody explains when duplicate records are found, then the business analysts want the following details:
Peabody informs you that a SORT companion utility program, ICETOOL, is significantly more feature rich.
ICETOOL can create the needed report about the duplicate unique account numbers. However, several minor modifications are needed.
You are given the following action items to get the information the business analysts requested:
You and Peabody review the JCL job output and the report in Z#####.P3.OUTPUT(#02).
Peabody observed the report is NOT exactly what the business analysts requested.
Peabody needs you to adjust an ICETOOL select control statement directives to get a report needed by the business analyst.
The current Z#####.P3.OUTPUT(#02) has a single record for each duplicate unique client account number.
The business analysts need the duplicate report to include all duplicate unique account number records to compare each record with all duplicates of the record
Peabody mentioned the select control statement directive LASTDUP needs to change.
However, Peabody could not remember the syntax of the replacement directive to write all the duplicate records into the
duplicate record report.
Peabody tells you to look at the following ICETOOL select statement directive documentation to determine
the syntax of the directive needed to write all the duplicate records into the duplicate report.
Using the ICETOOL utility - Selecting records by field occurrences
You just begun the journey of learning tricks known by z/OS technicians. You will learn more!
Programs that accept data input can help ensure field formats are valid.
When accepting data from another source or company, validating the data
is critical before trusting the data records are valid - simply referred to as data validity.
The previous challenge identified duplicate records and created a
report with the
duplicate records for review by the business analysts or auditors.
Another requirement outlined in the previous challenge,
"Does the foreign client master file contain invalid field formats in the client records?"
You are asked for a specific report on the data validity of the account limit and account balance fields.
Peabody knows what the business analysts and auditors want:
Peabody suggests review of record layout again
Peabody tells you the SORT utility can perform a validity check on packed decimal data fields.
Peabody asks you to observe the Account Limit packed decimal field starts in position 9
for a length of 5
and the Account Balance packed decimal field starts in position 14 for a
length of 5.
Peabody tells you the key to using the more advanced features of SORT and ICETOOL starts with understanding a logical expression.
A logical expression conditional statement can have any of following forms:
AND or OR can be used to get the result from more than one logical expression
Peabody wants you to start with an analysis of the BBRI client record
Account Limit and Account Balance fields.
where the data fields are both packed decimal.
PD is the relational condition data format type for packed decimal.
Peabody gives you the following to help gather the information:
Peabody explains knowing the specific invalid hex values found in Account Limit and Account Balance field
is needed because
while the business analyst or auditor did not request the specific hex values, once you find invalid hex values,
they may ask you for the specific hex value to help determine the correct amount.
Peabody informs you sort JCL is available to create the report.
Nice job!
Learning to use SORT utility and the companion ICETOOL utility can save you many hours of labor. Inexperienced technicians frequently write programs from scratch because they have never developed on an above average platform that contain system utilities such as SORT and ICETOOL.
Peabody anticipates based upon his previous experience that the business analysts will eventually ask for additional information such as:
Peabody wants you to know that another assignment (challenge) is antipated where the SORT utility and companion ICETOOL utility is the best way to complete the assignment.
Successful completion is a report in Z#####.P3.OUTPUT(#03) containing records with invalid Account Limit and Account Balance packed decimal.
COBOL, Common Business-Oriented Language, manages some of the most critical data and business logic in the world's economy. Many reasons exist for why COBOL is a computer language with incredible longevity.
COBOL programming language benefits from over 50 years of advancements, such as, COBOL compiler optimization, and COBOL runtime performance.
The core business logic of many large enterprises has decades of business process improvements embedded in COBOL programs.
The point is - whatever you read or hear about COBOL, be very skeptical. The opportunity to work directly with someone involved in writing or maintaining critical business logic using COBOL is an opportunity to learn about the operation of the core business. Business managers, business analysts, and decision makers come and go. The sum of all good business decisions can frequently be found in COBOL programs. The answer to "How does this business actually work?" can be found in COBOL programs.
COBOL is incredibly easy to learn and understand. Auditors are not programmers. However, auditors are responsible for insuring the business financial statements are presented fairly. COBOL processing frequently results in business ledger updates and subsequent financial statements requiring code review by auditors.
A comment recently made in a well known business journal by someone with a suspect agenda was quoted as saying, "COBOL is a computing language used in business and finance. It was first designed in 1959 and is pretty old and slow." A highly experienced business technology person knows the only true part of that last sentence was that COBOL was first designed in 1959.
It's no secret many banks have millions of lines of COBOL on mainframes. COBOL is at the core of how many banks handle the daily money transactions totally transparent to the smart phones involved with initiating those banking transactions.
That is real world!
COBOL that runs in the z/OS Environment is called Enterprise COBOL.
COBOL is an attention getter on resumes. Hiring authorities and hiring influencers in large organizations running mission critical applications written in COBOL are more likely to spend more time reading a resume after spotting COBOL.
You can complete this challenge without any experience with COBOL.
COBOL source code is provided. The COBOL source code is compiled into an executable module, then executed. The COBOL program reads the BBRI client data set name used in the previous challenge and prints several of the fields from each record.
The compile fails. The compile error is easy to recognize from a review of the COBOL compile output. A successful compile as a result of a modification made to the COBOL source is the first step to completing the challenge.
Following successful compile, program execution fails. The program execution failure is the result of COBOL internal name failing to match the JCL DDNAME. Review of the program execution error messages provide information needed to correct the JCL resuling in successful program execution to complete the challenge.
You should be in the SDSF status panel
Review the JCL job CBL0001J output
If the compile was successful, then the output shows the program execution failed.
CBL0001J DDNAME SYSOUT for StepName STEP2 tells the story for the execution failure.
If the compile was unsuccessful, then review compile output for the error, locate and fix the error.
Once the COBOL compile step is successful, then the COBOL execution step fails.
If the COBOL program execution was successful, then
Use SDSF XDC command to write CBL0001J PRTLINE DDNAME output to P3.OUTPUT member #04
Writing PRTLINE output to P3.OUTPUT(#04) is required to get credit
If the COBOL program execution was unsuccessful, then review output for the error, locate and fix the error.
Z#####.P3.OUTPUT(#04) should contain CBL0001J PRTLINE DDNAME output.
A developer at your company contacted you and said something is wrong with the BBRI client data. The developer wrote a program to read the BBRI client data. The result was a program execution abnormal end S0C7. Abend S0C7 is a well known failure related to invalid data in a numeric field.
The compile should be successful and the program execution should result in abend S0C7.
You explain to the application developer that you just completed an analysis of the BBRI client data and found invalid packed decimal fields.
Use SORT to remove the invalid packed decimal fields and write the output to a temporary data set.
Pass the SORT temporary data set to be read by the application developer program.
If you follow the instructions below, then you can prove the application developer program S0C7
was the result of the invalid packed decimal records.
Note: Consider using cut and paste for 8, 9, and 10
Success is Z#####.P3.OUTPUT(#05) contains BBRI records written by the application developer program, CBL0002.
If the COBOL program successfully executed, then the program writes output to Z#####.P3.OUTPUT(#05)
The term Virtual Storage Access Method (VSAM) applies to both a data set type and the access method used to manage various user data types. VSAM is a high performance data set type and popular for storing critical data.
VSAM is used primarily for applications. It is not used for source programs, JCL, or executable modules.
If you claim experience with z/OS, a perspective employee could potentially ask if you are familiar with VSAM during an interview. The challenge is an opportunity to say yes.
The challenge is to define a VSAM KSDS and load client data from a sequential data set.
Review of the documentation below is NOT required to complete the challenge.
However, the documenation is excellent for those wanting to understand how VSAM works and the associated high performance characteristics.
KSDS is defined with a unique key for every data record. The key value makes KSDS different from the other VSAM data types.
Review of the documentation below can assist with challenge completion.
The following Record Layout observations are mandatory to complete the challenge:
The challenge is to define and load data into a VSAM KSDS where you need to determine the correct DEFINE parameters for the VSAM type, key, and recordsize
If the JCL job is successful, then proceed to Actions to take to complete the challenge.
If the JCL job is unsuccessful, identify and correct the problem.
The SYSTSPRT output should have a REC-TOTAL greater than 0 for the DATA component
of the VSAM cluster
and REC-TOTAL of 1 for the INDEX component of the VSAM cluster.
Feel free to check your P3.OUTPUT(#06) contains attributes of Z#####.CLIENT.CLUSTER, then move on to the next challenge!
Click here and review first two sections of Reference drop down - DB2 for z/OS
Click here and review 3rd and 4th sections of Reference drop down - DB2 for z/OS
From the ISPF Primary Option Menu, enter d2 , the DB2 Interface Option
DB2I Primary Option Menu SSID must reference the DB2 Sub System ID, DBCG
If SSID is DBCG, then skip to selecting (1) SPUFI, below
If SSID is not DBCG, then enter d , the DB2I Defaults
Change DB2 NAME to DBCG on the DB2I DEFAULTS PANEL 1
DB2I DEFAULTS PANEL 2 is displayed - no changes needed - just enter to proceed
Observe SSID value is now DBCG
Select 1 , SPUFI, to process SQL statements
Type 3 changes on SPUFI Display
Input
1 DATA SET NAME is sql(create)
Output
4 DATA SET NAME is sql.out
Options
5 CHANGE DEFAULTS is no
After entering the above information, the following display appears
The message is harmless - ignore - enter to proceed
Default Panel included YES to Edit Input
The SQL statements starting with -- are comment lines
The SQL without -- creates a DB2 tablespace, table, and index
Change all occurrences of ##### to the last five digits of your personal ID
The display is an example of changing all ##### to 99999 (assuming the personal ID is 99999)
F3 to save and exit the edit session
Display below appears requesting enter to continue
SQL output - create tablespace successful
SQL output - create table successful
SQL output - create index successful
Success is DSNU1147I ... TOTAL NUMBER OF RECORDS LOADED=45 in DB2LOAD output
If failure, then correct error
Edit sql(select) and execute sql select statement
Edit sql(select) and add 4 select statements as instructed below
The objective is to output the total balance and average balance from the last 2 SQL select statements
in a currency format with a leading dollar sign and commas, $###,###,##0.00
Documentation about the DB2 for z/OS Currency function will prove helpful
DB2 for z/OS Currency
Edit sql(select)
You are NOT expected to have experience with Java to complete the challenge.
However, the Java code provided includes a working example of Java API to connect for read, write,
and update of a DB2 relational database table if you select to carefully review the syntax.
Challenge #08 assumes you successfully completed previous challenge.
Carefully reading the failure diagnostics written to the display indicates insufficient virtual storage.
Carefully reading the failure diagnostics written to the display indicates connection authorization failure.
Carefully read the DB2 SQL error that includes SQLERRMC=value
The value is NOT your table created in the previous challenge
Read the incorrect table value very carefully
The value must be an identical match to the table name you previously created and loaded
From Unix Services shell prompt
If the output looks good, then exit from the Unix shell prompt and return to ISPF.
Execute the db2jdbc4 java program using JCL which writes output to Z#####.P3.OUTPUT(#08)
tso submit 'zos.public.jcl(db2jdbc4)'
Feel free to check the JCL job for successful completion and the Z#####.P3.OUTPUT(#08) for the output previously displayed when java program was executed from Unix shell prompt.
You are NOT expected to have experience with COBOL to complete the challenge.
The COBOL code provided includes a working example of COBOL API (EXEC SQL ...) to connect to your DB2 relational database.
Challenge #09 assumes you successfully completed challenge #07 where you created and loaded a DB2 relational database table.
Big hints
Only 1 character is involved that created the problem
Look in COBOL PROCEDURE DIVISION and examine OPEN statements
Is the correct filename being opened?
Remember the big hint - removal of a single character in the COBOL will fix the problem
If needed you can delete all the lines of the COBOL code and copy in the original COBOL code again
Note: Big hint from above - read from your DB2 relational database table
What is the name of your DB2 relational database table?
Proceed to the next twisty
The challenge actions are the actions of a mainframe developer. The only difference is the developer might be using a DevOps GUI instead of text based ISPF, SDSF, and DB2 Interactive facilility. Using the text based TN3270 interfaces will result in proficiency with any DevOps GUI.
A review of part 3 challenge #03 will help you complete challenge #10.
Challenge #03 used JCL to execute program ICETOOL to display and verify packed decimal format in the account limit and account balance packed decimal fields of each record in ZOS.PUBLIC.BBRI.CLIENTS.
Locate the part 3 challenge #03 JCL execution of program ICETOOL used display and verify packed decimal fields in ZOS.PUBLIC.BBRI.CLIENTS.
The challenge #10 instructions assumes you are aware of the JCL used in challenge #03.
You will see the challenge instructions are very sparse by design. A work scenario might be that a business analyst, auditor, or your supervisor gives you, the experienced technician, an assignment where they have no idea how the assignment is completed.
If you investigated part 3 challenge #03 JCL, then be aware that only VERIFY is needed to complete the assignment. DISPLAY is NOT needed. VERIFY produces a return code 12 as a result of finding invalid packed decimal. However, the invalid packed decimal records are written in JCL job output.
The sparse instructions will force you to put a few things together using skills acquired from the previous challenges.
ZOS.MTM2018.PUBLIC.PACKED has 10,000 records.
Each record is a single packed decimal field starting in column 1 with a record length of 11 bytes.
Several of the packed decimal records in ZOS.MTM2018.PUBLIC.PACKED are invalid.
Your challenge is to write a report to P3.OUTPUT(#10) identifying every invalid packed decimal record found in ZOS.MTM2018.PUBLIC.PACKED data set.
Congratulations!
Accomplishing challenge #10 just proved how much you learned about navigating
your way around a z/OS environment.
You can say you have experience with z/OS.
Browse or View P3.OUTPUT(#10) and verify information you expected, then move on to the next challenge!
z/OS environment includes MVS data sets and Unix files.
MVS was the z/OS grandfather operating system.
MVS excluded the Unix component.
Therefore, MVS excluded Unix files.
In z/OS, 'MVS data sets' and 'Unix files' are separate and unique.
While MVS and Unix are technically 2 separate operating systems, z/OS is a blend
of both.
Executable programs can be in MVS data sets or Unix files.
Executable programs can simultaneously read and write MVS data sets and Unix files.
Executable programs can be copied between MVS data sets and Unix files.
The above is true for all compiled programming languages.
Challenge #11 uses C program source code to demonstrate flexibility of z/OS.
C program source is provided with comments explaining the code.
You will make simple modifications to the C program source code.
You do not need to be proficient with C programming languange to figure out the modifications. However, the challenge is opportunity to become familiar with C programming language.
Compile C program source creating executable in your Unix directory:
xlc -o cpgm cpgm.c
Execute the C program module from Unix shell prompt:
./cpgm
The C program counted from 1 to 10, writing each number to the display and
wrote a message in Unix cpgm.output
Review cpgm.output to read the message
cat cpgm.output
Write the cpgm.output to an MVS partitioned data set member
cp cpgm.output '//pds.data(cmsg1)'
Edit C program source in your Unix directory:
oedit cpgm.c
Observe the following:
Compile C program source creating executable in your Unix directory:
xlc -o cpgm cpgm.c
Execute the C program module from Unix shell prompt:
./cpgm
Review cpgm.output to read the message
cat cpgm.output
Write the cpgm.output to a different MVS partitioned data set member, cmsg2
cp cpgm.output '//pds.data(cmsg2)'
From Unix shell prompt:
cp cpgm '//load(cpgm)'
Return to ISPF session
exit
enter
JCL is available to compile C program source. However, JCL to compile the C program will not be used in the challenge.
The C program source was already compiled into an executable module from the Unix shell prompt and copied to an MVS data set. JCL can be used to execute the C program executable copied to the MVS data set without recompiling.
Observe the following in the JCL below:While TSO/ISPF environment was used to submit the JCL, the C program code is currently writing text message to a file in your unix directory, cpgm.output
The objective is to change the C program source code to write the text message to JCL HANDLER DD instead of cpgm.output
To accomplish the objective, a modification and subsequent execution of the C program is required to write to JCL HANDLER DD. You will learn several z/OS tricks to accomplish the objective.
Back to the Unix shell prompt
tso omvs
Edit the C program source code
oedit cpgm.c
Observe the following in the C program source:
If compile fails, then correct error and recompile.
Write the cpgm executable to an MVS partitioned data set memberIf p3.output(#11) has the text message, then you successfully completed the challenge.
If p3.output(#11) is empty, then exit back to ISPF sessions and use SDSF to view
JCL job output.
Locate and correct problems.
You learned a few new z/OS tricks in the challenge that other experienced z/OS technicians might be unaware of.
The contest z/OS is a virtual machine controlled by a single LPAR running z/VM
While previous years' contests exposed contestants to other IBM Z operating systems, 2018 contest is all z/OS. However, the contest z/OS is running as virtual machine under z/VM where the z/VM is running in one of several LPARs on the contest IBM Z hardwere - contest system is using a very small fraction of the IBM Z frame.
As a result of the contest z/OS running as a virtual machine under z/VM, it is possible to 'query' z/VM from z/OS.
If you want free access to Linux running on IBM Z:From ISPF
If done correctly, p3.output(#12) has 7 lines consisting of z/OS definitions used to connect to z/VM.
Great progress! Only 3 more challenges to be a candidate for winner or honorable mention status.
Some large companies need programmers that understand assembler language.
These technical positions pay well and lead to promotions in the technical ranks.
Familiarity with IBM Z assembler on a resume is a major attention getter for securing an interview.
You can say you have familiarity with IBM Z assembler as a result of completing the challenge.
Do not let the technical details in the challenge scare you away.
By the end of the challenge you will realize you are capable of beginning to understand the technical details of how computer software works.
Learning assembler is more difficult than learning other programming languages.
Assembler requires a programmer to learn about:
IBM Z Assembler coding and debugging requires:
A benefit of understanding assembler is the ability to debug complex system problems by reading system dumps.
Only a small number of developers and system programmer are proficient with assembler.
However, those familiar with assembler possess a deeper understanding of the operating
system technology and ability to write high performance code.
A humorous youtube video related to the above statement follows:
"The code I write runs on the mainframe."
A relatively simple assembler program will be used and explained.
Each computer architecture has machine instructions unique to the architecture. All computer languages supported by the architecture must be translated into the unique machine instructions of the underlying computer architecture. Each computer architecture has an assembly language which includes mnemonics that are assembled into machine instructions understood by the computer. Compilers and interpreters translate supported computer languages into the unique machine instructions understood by the hosting computer.
Computer processing memory is used to load and store the machine instructions and data for processing. The operating system keeps track of processing memory locations using addresses where some of the memory is free, some of the memory has machine instructions, and some of the memory has data.
Higher level languages such as C/C++, Java, COBOL, etc. were created to make programming the computer easier by hiding the complexity of the underlying machine instructions, addressable memory, and registers. Registers are at the top of the memory hierarchy, and provide the fastest way to access data.
IBM Z mainframe computer architecture, z/Architecture, is Complex Instruction Set Computing, CISC.
The assembler code that follows is explained in greater detail using the assembly compile output.
SDSF review of output for ASMPGM, DDNAME SYSPRINT and ProcStep C, should match the following images.
Observe the following in the image below:Below is assembler code frequently reused for "standard linkage",
store the location and register content of the caller program to return control when done.
Stmt 18 includes assember mnemonic B, a branch.
The operand is SETUP, a program label, a quick way to resolve addressable location in memory.
The left of Stmt 18 has an op code that begins with 47, which is the op code for mnemonic B, branch.
Stmt 18 Addr2 is 00014.
Observe Loc 00014, Stmt 22, is label SETUP with more assembler code to execute.
While the explanation below is elaborate, it is just preparation for you to see these changes happen at breakpoints during program execution later in the challenge.
The program body includes -
Below is commonly reused code for 'standard linkage', restoring the caller program registers.
Observe Stmt 56 with 'WTO'
Left is blank - no op code, no operands, and no addresses
WTO, abbreviation for Write To Operator, is an assembler macro
The text following WTO is written to the system log
Below observe Stmt 58 to 64 with a '+' following the statement number
58 to 64 is the WTO macro expanded code
Observe Stmt 65 with op code beginning with x'07' associated with mnemonic BR, branch
The address location represented by label RETREG is register 14
where register 14 contains the address location of the caller program.
So, the execution result is a branch to an address location of the caller program.
Below is assembler defined constants with assembly assigned addressable memory locations
The op code area is content at the addressable memory location when the program starts execution.
A few observations -
TSO TEST facility is used to execute a program with the added capable to stop the program execution at chosen address locations to inspect changes in registers and changes in other address locations in the program.
The TSO Ready prompt is required to use the TSO TEST facility.
If ISPF =x terminates both ISPF and automatically logs off TSO, stopping you from getting to the TSO Ready prompt, then revisit Part 2, challenge #01 instructions.
Once in the TSO Ready prompt, the commands below can be copied and pasted when instructed to enter the commands.
Consider opening a separate browser tab to view the ASMPGM compile output (seen above in the section
'Review of assembler compile details') as you study how the assembler program works using the TSO TEST facility.
Return to ISPF by entering ISPF
Edit z#####.source member name ASMPGM
Submit and verify results via SDSF and potentially using TSO TEST to see if ASMPGM is executing as you expected
Important: If you use TSO TEST to validate your ASMPGM is behaving as you expected, remember the register used to store the sum of the arithmetic add operation is in a hexadecimal value.
From ISPF command line, enter tso submit 'zos.public.jcl(p3ch13)'
The above JCL job copies your modified ASMPGM source code to P3.OUTPUT(#13)
If a person says to you, "It is not possible to Master the Mainframe by completing the contest". You can respond, "Well, I did learn it takes experience and repetition to truly Master the Mainframe. However, I also became familiar with the details of IBM Z assembler and modified assembler code during the contest."
Challenge #13 was a lot of work.
For your amusement -
"I asked my manager about a mainframe you mentioned."
Rexx is a very underrated programming language; elegant in design, simple syntax, easy to learn, use and maintain, yet as powerful as any other scripting language available today.
Rexx is available for every OS.
If you find yourself supporting a large enterprise z/OS in the future, you will encounter Rexx routines used to automate many tasks. Those encountering Rexx quickly appreciate the above first statement. However, z/OS Rexx is more than a scripting language with all the benefits of any scripting language. z/OS Rexx can be compiled into machine code for high performance. Compiled z/OS Rexx is used to build business applications and z/OS software products.
Many thousands of IDs, security permissions, data sets, and unix directories are required for the contest. A Rexx routine is used to build the thousands of IDs, security permissions, data sets, and unix directories. A Rexx routine makes it possible to complete these tasks very quickly.
The following is valid Rexx code:
/* Rexx */
say 'hello world'
Rexx has a small number of language keywords and significantly larger number of built-in functions.
Rexx execution is flexible-
The challenge involves reading and interpreting Rexx code.
The Rexx code supports 4 types of statements
Rexx functions and instructions are available to all operating systems.
z/OS TSO/E is the specific processing facility in the challenge. All z/OS TSO/E commands are available to Rexx. The suggested Chapter 10 source of information above does not cover all the z/OS TSO/E commands. Chapter 10 only covers TSO/E commands created specifically for Rexx, such as EXECIO which is in the challenge Rexx code.
Sources of information for additional Rexx programming constructs used in the challenge code
There are many excellent internet sources of information for Rexx such as
from a small company in UK and
Introductory Rexx Tutorial
While in z#####.source directory list
Enter ex to left of member name slots to execute the Rexx code.
Observe Rexx syntax error. The error message provides the line number.
Edit member slots, correct the Rexx function syntax error, and F3 to save changes.
Enter ex to left of member name slots to execute the Rexx code.
If the first syntax issue is resolved, then observe a fruit color fails to show in the middle window.
Edit member slots, correct the syntax problem enabling fruit color to appear in middle window, and F3.
Enter ex to left of member name slots to execute the Rexx code.
Follow the instructions.
Once you win, you will be instructed to read the slots Rexx code to complete the challenge successfully.
You possess significant z/OS experience by completing these part 3 challenges. Completing the last challenge places your in contention for the winner circle or the honorable mention circle. These are prestigious positions in the Part 3 Wall of Fame drawing the attention of employers.
Storyline - The role you are now playing is a role of an experienced z/OS technician. Your assignment as an experienced z/OS technician is to help a newbie become familiar with the z/OS environment. How you are going to assist a newbie become familiar with z/OS is by explaining system details in a report format using a combination of JCL, SDSF, SDSF commands, Rexx, z/OS commands, JES2 commands, and TSO commands.
You are among a small fraction of the enrolled contestants completing the last challenge with hopes of being in the winner circle or in the honorable mention circle. It is possible for several contestants to be tied going into the final challenge. Therefore, your creativity applied to the final challenge is used to break ties, determine the winners, and determine who is in the honorable mention circle.
The final challenge has no correct or incorrect answer.
The final challenge is a matter of exercising technical creativity to distinguish your ideas and work from the other contestants. You are given a few ideas with sample Rexx code as the basis for applying creativity.
** Elaboration on quality and simplicity related to applied challenge creativity:
JCL job p3ch15 created the following data sets:
A brief explanation about the sample JCL, Rexx source code, and output is coming up.
Browse your personal CH15.OUTPUT partitioned data set
Observe the partitioned data set has 3 members:
Select member S00 in CH15.OUTPUT to review
S00 has system command output
Select member S01 in CH15.OUTPUT to review
S01 shows SDSF command output
Select member TMP in CH15.OUTPUT to review
Observe is SDSF output that include information from a few SDSF commands
S01 excludes the SDSF primary menu and blank lines
Browse your personal CH15.JCL partitioned data set
Observe the partitioned data set has 2 members:
Select member S00JCL in CH15.JCL to review
S00JCL is JCL used to write system command output to CH15.OUTPUT(TMP)
S00JCL executes Rexx routine TRIMCOL writing new member S00
Rexx routine TRIMCOL trims unnecessary leading 45 columns writing
CH15.OUTPUT(S00)
Select member S01JCL in CH15.JCL to review
S01JCL is JCL used to write SDSF command output to CH15.OUTPUT(TMP)
S01JCL executes Rexx routine TRIMLINE writing new member S01
Rexx routine TRIMLINE removes unnecessary SDSF primary menu and blank lines
writing the remaining output to CH15.OUTPUT(S01)
Browse your personal CH15.SOURCE partitioned data set
Observe the partitioned data set has 11 members:
Select member SAMP1 in CH15.SOURCE to review
SAMP1 is Rexx
F3 to return back to CH15.SOURCE list of partitioned data set members
Enter ex to the left of SAMP1 to view how the Rexx code works
Select member SAMP2 in CH15.SOURCE to review
SAMP2 is Rexx
F3 to return back to CH15.SOURCE list of partitioned data set members
Enter ex to the left of SAMP2 to view how the Rexx code works
Select member SAMP3 in CH15.SOURCE to review
SAMP3 is Rexx
F3 to return back to CH15.SOURCE list of partitioned data set members
Enter ex to the left of SAMP3 to view how the Rexx code works
Select member SAMP4 in CH15.SOURCE to review
SAMP4 is Rexx
F3 to return back to CH15.SOURCE list of partitioned data set members
Enter ex to the left of SAMP4 to view how the Rexx code works
Select member SAMP5 in CH15.SOURCE to review
SAMP5 is Rexx
F3 to return back to CH15.SOURCE list of partitioned data set members
Enter ex to the left of SAMP5 to view how the Rexx code works
Select member SAMP6 in CH15.SOURCE to review
SAMP6 is Rexx
F3 to return back to CH15.SOURCE list of partitioned data set members
Enter ex to the left of SAMP6 and respond with member S00 to view how the Rexx code works
Select member SAMP7 in CH15.SOURCE to review
SAMP7 is Rexx
F3 to return back to CH15.SOURCE list of partitioned data set members
Enter ex to the left of SAMP7 and respond with member S00 to view how the Rexx code works
Select member S00 in CH15.SOURCE to review
S00 is Rexx
F3 to return back to CH15.SOURCE list of partitioned data set members
Enter ex to the left of S00 and respond with member S00 to view how the Rexx code works
Select member S00#15 in CH15.SOURCE to review
S00#15 is Rexx
F3 to return back to CH15.SOURCE list of partitioned data set members
Enter ex to the left of S00 and respond with member S00 to view how the Rexx code works
View P3.OUTPUT(#15) to see output written by S00#15 Rexx routine
Select member TRIMCOL in CH15.SOURCE to review
TRIMCOL is Rexx
TRIMCOL is used in CH15.JCL members
Select member TRIMLINE in CH15.SOURCE to review
TRIMLINE is Rexx
TRIMLINE is used in CH15.JCL members
z/OS and JES2 display commands are available to report system information. Any reference to display command means the display command with specifically selected display command operands.
You are expected to try various z/OS and JES2 display commands and briefly review the display command output.
A sample Rexx routine is provided to demonstrate how to parse across display command output.
You are to select interesting details from the command output and write an easy to understand report using your own words or headings.
Use SDSF to display information about the z/OS and the critical companion subsystem, JES.
SDSF (=sd) is useful for gather information about the system.
Your ID is authorized to enter z/OS and JES2 display commands.
Try the following from SDSF:
Available display z/OS commands start on page 239 and end on page 492.
JES2 Commands ManualAvailable display JES2 commands start on page 245 and end on page 568.
Rexx was discussed in a previous challenge.
You may not have heard much about Rexx before because the newer languages frequently
receive all the hype.
Rexx is highly underrated and an unsung hero of scripting
languages.
Rexx in the IBM Z environment has remained a popular 'go to'
language for 3 decades for those familiar with Rexx.
If you work in a technical role with z/OS or z/VM, you will most likely encounter Rexx routines written by senior and retired technicians.
Rexx is used for automation, infrastructure support, reporting, protyping, and business applications.
Rexx can be executed interactively or in batch using JCL.
Rexx source code can be executed directly such as an scripting
language or Rexx can be compiled in system executable modules.
Rexx can work with MVS data sets, Unix files, and process any data from any z/OS data source.
Using Rexx with system utilities and functions is a powerful combination that you will observe in the challenge.
The Internet has a wealth of Rexx information and sample code
If you want create a backup of your work in CH15.JCL, CH15.SOURCE, and CH15.OUTPUT,
then tso submit 'zos.public.jcl(bkupch15)'
Above JCL creates copies with names, CH15.JCL.BACKUP, CH15.SOURCE.BACKUP, CH15.OUTPUT.BACKUP
If you tso submit 'zos.public.jcl(p3ch15)' a second time,
then CH15.JCL, CH15.SOURCE, and CH15.OUTPUT will be deleted and replaced with original copy
If you tso submit 'zos.public.jcl(p3ch15)' a second time,
then consider creating a backup first to have previous work available in the 'backup'
data sets
Use JCL to process system commands which writes the command output to 1 or more members in CH15.OUTPUT
Example: CH15.JCL(S00JCL)
Write a Rexx routine to read the 1 or more members from CH15.OUTPUT, then write a report to P3.OUTPUT(#15)
Example: CH15.SOURCE(S00#15)
Report written to P3.OUTPUT(#15) should include brief headings or statements helping to explain report details
to reader
Example: Your role is the experienced z/OS tech teaching a newbie (a judge) about the z/OS contest system
Under consideration - we might have selected z/OS newbies to help judge final report and optional additional reports
NOTE: "optional additional reports" - see Evaluation twisty below
Report written to P3.OUTPUT(#15) needs to include a single line that informs reader/judges the name of the
Rexx routine used to create the P3.OUTPUT(#15) report -
Example: Report created by Rexx routine - ????? - where ????? could be R00#15 in CH15.SOURCE
Read first twisty in Background section again - Learning and using z/OS creatively
When judging the final challenge:
Remember: Quality has significance far beyond quantity. Therefore, a large volume of independent reports beyond P3.OUTPUT(#15) has little chance for more points.
The final challenge is very different from the previous action based challenges with specific instructional guidance. The final challenge is the opportunity to explore the environment and think about what you would present to demonstrate your expanding z/OS technical ability. Have fun and work on the final challenge as time permits. You have months to complete the challenge.
Completing Part 3 makes it highly probable your name and school will be posted in Part 3 Wall of Fame. This is a distinguished and relatively short list. You will be in this list at least as an Honorable Mention and possibly as a top place winner.
Bottom line: You cannot.
No routine is provided to score the answers you submitted.
The last challenge is very open ended for the purpose of distinguishing yourself
from other contestants.
The final challenge scores from judges are averaged for each contestant, then added to
the point count
associated with challenges 1 to 14 to determine winners.