Intro to the AS/400

Download Report

Transcript Intro to the AS/400

Intro to the AS/400
Chapter 5 - CL Programming
Copyright 1999 by Janson Industries
1
Objectives




Explain general programming concepts
Explain CL’s strengths and weaknesses
as a programming language
Show how to create a CL program
Explain what a compilation report is and
how to use it to find program errors
2
Creating CL Programs
Library
CRTMBR
*PGM
CLP
PF-SRC
Programmer
CL
Commands
Compile
SEU
CRTMBR
CLP
3
Programs




Programs are comprised of many
programming language instructions
Instructions are written on lines or
statements.
Each statement/line in a member is
assigned a statement/line number.
CL commands (instructions) can span
many lines
4
Program Processing



Programs can execute instructions
3 ways
The default method is sequential,
I.e. in statement number order
Execution can also be conditional
and iterative.
5
CL Command Syntax

The format for a CL Command is:
COMMAND PARAMETER PARAMETER ….

There is at least one space between
the:




Command
First parameter
Each succeeding parameter
Commands are continued from one
line to another by placing a plus sign
after the command or a parameter
6
CL Command Syntax

The + must be preceded by at least a
space if the continuation is between:
a
command and a parameter
 two parameters
COMMAND +
PARAMETER PARAMETER
COMMAND+
PARAMETER PARAMETER
COMMAND PARAMETER PARAMETER +
PARAMETER PARAMETER
+
PARAMETER
COMMAND PARAMETER PARAMETER+
PARAMETER PARAMETER
7
Continuing a CL Command

The + is not preceded by space(s) if the
continuation is in the middle of the:
 Command
word
 Parameter keyword
COMM+
AND PARAMETER PARMETER
COMMAND PARAMETER PARA+
METER
COMM +
AND PARAMETER PARMETER
COMMAND PARAMETER PARA +
METER
8
Continuing a CL Command

If a parameter value(s) allows
spaces, then the + is preceded by
space(s)
GRTOBJAUT OBJ(YOURLIBXX/CLSRC) OBJTYPE(*FILE) +
USER(INTRO35) AUT(*OBJALTER *OBJEXIST +
*OBJMGT *OBJOPR *OBJREF *ADD)
SNDMSG MSG('The rain in Spain falls manely on the +
lions.') TOUSR(INTRO99)
9
Continuing a CL Command

If the continuation is in the middle of
a value, no spaces precede the +
GRTOBJAUT OBJ(YOURLIBXX/CLSRC) OBJTYPE(*FILE) +
USER(INTRO35) AUT(*OBJALTER *OB+
JEXIST *OBJMGT *OBJOPR *OBJREF *ADD)
GRTOBJAUT OBJ(YOURLIBXX/CLSRC) OBJTYPE(*FILE) +
USER(INTRO35) AUT(*OBJALTER *OB +
JEXIST *OBJMGT *OBJOPR *OBJREF *ADD)
10
CL Programs



Begin with a PGM command and end
with an ENDPGM command
Comments (non-executable text) may
precede the PGM statement
Comments begin with a forward slash
& an asterisk and end with an asterisk
& a forward slash
/* This is an example of a comment. */
11
Programs



Operating
System
Programs read and write data
Data can come from storage, the OS,
or the person who calls the program
Programs can write data to storage, a
printer or a workstation
Data
Storage
Program
Data
Data
Data
Printout
User
12
User Supplied Program Data

You can supply data when calling the
program as follows:
CALL pgm1 (‘chardata’ numeric ‘chardata’….)


PGM
To receive the data, the program must
have a PARM keyword in the PGM
statement.
The PARM keyword identifies the
program variables that will hold the data
PARM(&CUSTNAME &ORDAMT)
13
User Supplied Program Data

The parameters specified on the call
must match the parameters specified in
the PARM keyword
CALL pgm1 (‘Walmart’ 275)
PGM

PARM(&CUSTNAME &ORDAMT)
If they don’t match:
CALL pgm1 (275)
The program will not be run and you will
get the following message:
Parameters passed on CALL do not match those required.
14
Program Variables


Programs store input and output in
program variables
Just like a data base field, a program
variable has a:




Name
Length
Data type
Program variables exist for as long as
the program is running
15
CL Program Variables


Are defined with a DCL (declare)
command
A CL program variable name must:




Begin with an ampersand (&)
Has a max length of 11
Cannot contain spaces
DCL statements must be at the
beginning of the program following the
PGM statement
*************** Beginning of data
0001.00
PGM
PARM(&CUSTNAME
0002.00
DCL
VAR(&CUSTNAME)
0003.00
DCL
VAR(&ORDAMT)
**********************
&ORDAMT)
TYPE(*CHAR) LEN(15)
TYPE(*DEC) LEN(9 2)
16
Retrieving Data from OS/400

RTVSYSVAL - retrieves and stores system
parameter values in program variables:
 Date
 Time
 System
RTVSYSVAL

Default Printer
SYSVAL(QTIME)
RTNVAR(&CURTIME)
RTVJOBA - retrieves and stores job
information in program variables:
 Job
name
 User running job
 Output queue
RTVJOBA USER(&USERID)
17
Sending Data to a User

SNDUSRMSG - sends a message to the
person running the program or a specified
users message queue
SNDUSRMSG
MSG('I''ll be back')
SNDUSRMSG
MSG(&CUSTNAME) MSGTYPE(*INFO) +
TOUSR(INTRO99)

You can build complex messages combining
static text and program variables by using
string functions
18
String Functions

Concatenation - joins two strings together
 *CAT
SNDUSRMSG
SNDUSRMSG
SNDUSRMSG

 *TCAT
- eliminates trailing spaces
 *BCAT
- one trailing space between strings
MSG('I''ll be back at
MSG('I''ll be back at
MSG('I''ll be back at
’ *CAT &CURTIME)
’ *TCAT &CURTIME)
’ *BCAT &CURTIME)
Results in:
I'll be back at 14:09:08
I'll be back at14:09:08
I'll be back at 14:09:08
19
String Functions

Substring - identifies a subset of a string
 %SST(string

start-location size)
When used with a CHGVAR command,
new strings can be created.
CHGVAR VAR(&NOSECTIME) VALUE(%SST(&CURTIME 1 5)
SNDUSRMSG MSG('I''ll be back at

’ *BCAT &NOSECTIME)
Results in:
I'll be back at 14:09
20
CL Program
0001.00
0002.00
0003.00
0004.00
0005.00
0006.00
0007.00
0008.00
0009.00
0010.00
0011.00
0012.00
0013.00
0014.00
0015.00
0016.00
0017.00
0018.00
0019.00
0020.00
0021.00
0022.00
START:
PGM PARM(&LIBNAME &FILENAME &MEMNAME &MEMTYPE)
/* Create info is supplied and the variables defined*/
DCL
DCL
DCL
DCL
VAR(&FILENAME)
VAR(&MEMNAME)
VAR(&LIBNAME)
VAR(&MEMTYPE)
TYPE(*CHAR)
TYPE(*CHAR)
TYPE(*CHAR)
TYPE(*CHAR)
LEN(11)
LEN(11)
LEN(11)
LEN(3)
/* The member is created
CRTMBR: STRSEU SRCFILE(&LIBNAME/&FILENAME)
SRCMBR(&MEMNAME)
TYPE(&MEMTYPE)
/* Message to confirm member creation is sent
SNDUSRMSG
*/
+
+
*/
MSG('IT''S DONE, PAPPY!')
/* The program is ended
*/
END:
21
ENDPGM
Compilation Reports
Library
PF-SRC
CRTMBR
CLP
CRTMBR
*PGM
CLP
MSGQ
Compile
Compilation
Report
22
Compilation Reports

General Information

Source Code Listing

Cross reference table

Error message summary
23
General information area
Display Spooled File
File . . . . . :
COMPILEEX
Page/Line
1/1
Control . . . . .
________
Columns
1 - 78
Find . . . . . .
______________________________
*...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+...
5763SS1 V3R2M0 960517
Control Language
GRA
Program . . . . . . . . . . . . . . . . . . . :
COMPILEEX
Library . . . . . . . . . . . . . . . . . . :
GRADES
Source file . . . . . . . . . . . . . . . . . :
GRADES
Library . . . . . . . . . . . . . . . . . . :
GRADES
Source member name . . . . . . . . . . . . . :
COMPILEEX
10/30/97 17:06:
Source printing options . . . . . . . . . . . :
*SOURCE *XREF *GEN *NOSE
Program generation options . . . . . . . . . :
*NOLIST *NOXREF *NOPATCH
User profile . . . . . . . . . . . . . . . . :
*USER
Program logging . . . . . . . . . . . . . . . :
*JOB
Allow RTVCLSRC command . . . . . . . . . . . :
*YES
Replace program . . . . . . . . . . . . . . . :
*YES
Target release . . . . . . . . . . . . . . . :
V3R2M0
Authority . . . . . . . . . . . . . . . . . . :
*LIBCRTAUT
Sort sequence . . . . . . . . . . . . . . . . :
*HEX
Language identifier . . . . . . . . . . . . . :
*JOBRUN
24
Searching the report

Control field commands provide quick
movement through the spool file
P+5
P-5
P5
+5
-5
W+5
W-5
W5
B or *BOT
T or *TOP
Move forward 5 pages
Move backwards 5 pages
Move to page 5
Move forward 5 lines
Move backwards 5 lines
Move to the right 5 columns
Move to the left 5 columns
Move to the fifth column
Move to the end of the spool file
Move to the beginning of the spool file
25
Find Area

Allows you to search for a character
string within the compilation report

Case sensitive

To find a string:
 Enter
the text in the find area
 Press F16

To find other occurrences of the
string continue to press F16
26
Source Code Listing


Displays source code
Error messages placed after incorrect
statements
Control Language Source
SEQNBR *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+...
100DCL
VAR(&JOB) TYPE(*CHAR) LEN(7)
* CPD0740 10 PGM command missing.
200DCL
VAR(&USR) TYPE(*CHAR) LEN(10)
300RTVJOBA
JOB(&JOB)
* CPD0784 30 Variable &JOB for parameter JOB must be *CHAR, minimum length 10
400RTVJOBA
USER(&USER)
* CPD0727 40 Variable '&USER
' is referred to but not declared.
500SNDUSRMSG MSG('The job number is' *cat &job *cat +
600
'and the user is ' *cat &user *cat +
700
'.') TOUSR(&USER)
* CPD0727 40 Variable '&USER
' is referred to but not declared.
* CPD0727 40 Variable '&USER
' is referred to but not declared.
800GOTO
CMDLBL(END)
* CPD0725 10 End of source file reached without ENDPGM command.
* * * * *
E N D
O F
S O U R C E
* * * *
27
Error messages

Comprised of three parts:
 Error
code
 Error message
 Severity level
CPD0740
10
PGM command missing.
28
Cross Reference table


For every variable and label, the statement
numbers that reference each are displayed
Errors messages listed here also
5763SS1 V3R2M0 960517
Declared Variables
Name
Defined
&JOB
100
&USR
200
* CPD0726 10 Variable '&USR
Defined Labels
Label
Defined
END
******
* CPD0715 30 Label 'END
* * * *
Control Language
Cross Reference
GRA
Type
Length
References
*CHAR
7
300
500
*CHAR
10
' declared but not referred to.
References
800
' does not exist.
* E N D O F C R O S S
R E F E R E N C E
29
Error Message Summary




Error message total
Subtotals by severity level
Successful or not message
Max severity
Message Summary
Severity
Total
0-9 10-19 20-29 30-39 40-49 50-59 60-69 70-79 80-89 90
8
0
3
0
2
3
0
0
0
0
Program COMPILEEX not created in library GRADES. Maximum error severity 40.
* * * * * E N D O F M E S S A G E S U M
Severity 20 errors (and higher) stop the compile
30
Run Time Errors



Source code that compiles can still
have errors when run or have
incorrect output
If there is a run time error, the system
will display a short message
For more info about the problem:
 Move
the cursor to the message
 Press F1
 Additional Message Information will
be displayed for the message
31
JOBLOG



Most of the time, Additional Message
Information will be enough to
understand the problem
If not, all messages need to be
checked. (Not just the one displayed
by the system.)
Display the JOBLOG by
 Pressing
F10 at the Additional
Message Information screen
 Or issue the DSPJOBLOG command
32
Run Time Errors

Some run time errors are not the
result of incorrect programming e.g.
 Incorrect
user input
 Lack of authority
 No data


The program should not end when
these types of errors occur
The program should check for these
conditions and provide user friendly
messages
33
Monitoring for Messages



MONMSG - allows the program, NOT the
OS, to handle specified message(s)
The CL command specified in the EXEC
keyword is executed when the error occurs
If MONMSG placed right after DCL’s:
 EXEC
performed regardless of the program
statement causing the error

If MONMSG follows a command:
 EXEC
performed only if the preceding
command caused the specified error
34
Monitoring for Messages

CPF9810 - library does not exist
MONMSG MSGID(CPF9810) EXEC(CRTLIB &LIBNAME)

CPF9812 - file does not exist
MONMSG MSGID(CPF9812) EXEC(GOTO CMDLBL(NOFILE))

This MONMSG results in an error
handling routine being executed
MONMSG MSGID(CPF9812)

No EXEC keyword means the error
will be ignored
35
Error Handling Routines



Can further investigate the cause of
the problem
Perform complex functions to solve
the problem
Allow the user to select a course of
action from program defined options
36
Message Replies



Messages can be sent that require
a reply
The reply can be stored in a
program variable
The reply value can be the basis for
conditional statement execution
37
Message Replies



MSGRPY - Identifies the program
variable to hold the reply
VALUES - Defines the valid values that
can be entered as a reply
IF condition - if true, the statement(s)
following THEN will be performed
MONMSG MSGID(CPF9810) EXEC(SNDUSRMSG MSG('THE LIBRARY +
SPECIFIED DOES NOT EXIST. TO CREATE THE LIBRARY, REPLY +
WITH A "Y". TO END THE PROGRAM, REPLY WITH A "N".') +
MSGRPY(&REPLY) VALUES(Y N))
IF COND(&REPLY *EQ N) THEN(GOTO END)
IF COND(&REPLY *EQ Y) THEN(CRTLIB &LIBNAME)
38
Creating CL Commands




Creating a CL command entails
identifying a program and prompt screen
to be called when the command is
issued.
So, you must create a program and
prompt screen before creating a
command
CL command objects have type = *CMD
A prompt screen makes it easier for a
user to supply data to a program
39
Prompt Screen

0001.00 START:
0002.00
0003.00
0004.00
0005.00
0006.00
0007.00
0008.00 CRTMBR:
0009.00
0010.00
0011.00
0011.00
0013.00
0014.00 END:
The prompt screen for the following
program must have 4 data entry fields
PGM PARM(&LIBNAME &FILENAME &MEMNAME &MEMTYPE)
DCL
DCL
DCL
DCL
VAR(&FILENAME)
VAR(&MEMNAME)
VAR(&LIBNAME)
VAR(&MEMTYPE)
TYPE(*CHAR)
TYPE(*CHAR)
TYPE(*CHAR)
TYPE(*CHAR)
LEN(10)
LEN(10)
LEN(10)
LEN(3)
STRSEU SRCFILE(&LIBNAME/&FILENAME)
SRCMBR(&MEMNAME)
TYPE(&MEMTYPE)
SNDUSRMSG
+
+
MSG('IT''S DONE, PAPPY!')
ENDPGM
40
Prompt Screen Example
CREATE MEMBER (CRTMBR)
Type choices, press Enter.
LIBRARY . . .
SOURCE FILE .
SOURCE MEMBER
MEMBER TYPE .
F3=Exit
.
.
.
.
F4=Prompt
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
F5=Refresh
.
.
.
.
.
.
.
.
YOURLIB
___________
___________
___
F12=Cancel
NAME
NAME
NAME
CLP RPG PF CBL LF
Bottom
F13=How to use this display
F24=More keys
41
Prompt Screens



Special CL commands to define
prompt screens
CMD - only required command. The
keyword PROMPT defines the screen
title
PARM - used to define an entry field
42
PARM command

PARM keywords used to define a field:
 KWD
- defines the fields keyword
 TYPE
 LEN
- type of data the field will accept
- length of field
 CHOICE
- text that will appear to the right
of the field regarding value choices
 PROMPT
- text that will appear to the left
of the field, describes the field
 DFT
- defines a default value for the field
 VALUES/RSTD
- identifies the only valid
values for the field
43
Prompt Screen Source Example
CMD
PROMPT('CREATE MEMBER')
PARM
KWD(LIB) TYPE(*CHAR) LEN(11) +
CHOICE('NAME') +
PROMPT('LIBRARY') DFT(YOURLIB)
PARM
KWD(FILE) TYPE(*CHAR) LEN(11) +
CHOICE('NAME') +
PROMPT('SOURCE FILE')
PARM
KWD(MBR) TYPE(*CHAR) LEN(11) +
CHOICE('NAME') +
PROMPT('SOURCE MEMBER')
PARM
KWD(TYPE) TYPE(*CHAR) LEN(3) +
CHOICE('CLP RPG PF CBL LF') +
PROMPT('MEMBER TYPE')
44
Prompt Screen Example
CMD
PROMPT('CREATE MEMBER')
CREATE MEMBER (CRTMBR)
Type choices, press Enter.
LIBRARY . . .
SOURCE FILE .
SOURCE MEMBER
MEMBER TYPE .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
YOURLIB
___________
___________
___
NAME
NAME
NAME
CLP RPG PF CBL LF
PARM KWD(TYPE) TYPE(*CHAR) LEN(3) +
CHOICE('CLP RPG PF CBL LF') +
PROMPT('MEMBER TYPE')
45
Creating the command - CRTCMD
Create Command (CRTCMD)
Type choices, press Enter.
Command . . . . .
Library . . . .
Program to process
Library . . . .
Source file . . .
Library . . . .
Source member . .
Text 'description'
. . . .
. . . .
command
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
> CRTMBR
>
YOURLIBXX
> CRTMBR
>
YOURLIBXX
QCMDSRC
>
YOURLIBXX
CRTMBR
*SRCMBRTXT
Name
Name,
Name,
Name,
Name
Name,
Name,
*CURLIB
*REXX
*LIBL, *CURLIB
*LIBL, *CURLIB
*CMD
Command to be created
Program that will be called
Prompt screen to display (source definition)
46
Points to Remember




CL commands can be “grouped” into
programs
Compilation reports are used to
diagnose compile errors
The JOBLOG helps diagnose run time
errors
Users can create their own CL
commands
47