1 intro to the as/400 chapter 5 - cl programming copyright 1999 by janson industries
TRANSCRIPT
1
Intro to the AS/400Chapter 5 - CL Programming
Copyright 1999 by Janson Industries
2
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
3
Creating CL Programs
Library
PF-SRC
CRTMBRCLP
Compile
CRTMBR*PGM
CLP
SEU
Programmer
CLCommands
4
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
5
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.
6
CL Command Syntax The format for a CL Command is:
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
COMMAND PARAMETER PARAMETER ….
7
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
8
Continuing a CL Command
COMM+AND PARAMETER
PARMETER
COMMAND PARAMETER PARA+ METER
COMM +AND PARAMETER
PARMETER
COMMAND PARAMETER PARA + METER
The + is not preceded by space(s) if the continuation is in the middle of the: Command word Parameter keyword
9
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)
10
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)
11
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. */
12
Programs 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
Program
Storage
Operating System
User
PrintoutData
Data Data
Data
13
User Supplied Program Data You can supply data when calling the
program as follows:
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
CALL pgm1 (‘chardata’ numeric ‘chardata’….)
PGM PARM(&CUSTNAME &ORDAMT)
14
User Supplied Program Data The parameters specified on the call
must match the parameters specified in the PARM keyword
If they don’t match:
CALL pgm1 (‘Walmart’ 275)
PGM PARM(&CUSTNAME &ORDAMT)
CALL pgm1 (275)
Parameters passed on CALL do not match those required.
The program will not be run and you will get the following message:
15
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
16
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 &ORDAMT)0002.00 DCL VAR(&CUSTNAME) TYPE(*CHAR) LEN(15) 0003.00 DCL VAR(&ORDAMT) TYPE(*DEC) LEN(9 2)
17
Retrieving Data from OS/400 RTVSYSVAL - retrieves and stores system
parameter values in program variables: Date Time System Default Printer
RTVJOBA - retrieves and stores job information in program variables:
Job name User running job Output queue
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&CURTIME)
RTVJOBA USER(&USERID)
18
Sending Data to a User SNDUSRMSG - sends a message to the person
running the program or a specified users message queue
You can build complex messages combining static text and program variables by using string functions
SNDUSRMSG MSG('I''ll be back')
SNDUSRMSG MSG(&CUSTNAME) MSGTYPE(*INFO) + TOUSR(INTRO99)
19
String Functions Concatenation - joins two strings together
*CAT *TCAT - eliminates trailing spaces *BCAT - one trailing space between strings
Results in:
SNDUSRMSG MSG('I''ll be back at ’ *CAT &CURTIME)SNDUSRMSG MSG('I''ll be back at ’ *TCAT &CURTIME) SNDUSRMSG MSG('I''ll be back at ’ *BCAT &CURTIME)
I'll be back at 14:09:08 I'll be back at14:09:08 I'll be back at 14:09:08
20
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.
Results in:
CHGVAR VAR(&NOSECTIME) VALUE(%SST(&CURTIME 1 5)
SNDUSRMSG MSG('I''ll be back at ’ *BCAT &NOSECTIME)
I'll be back at 14:09
21
CL Program
0001.00 START: PGM PARM(&LIBNAME &FILENAME &MEMNAME &MEMTYPE) 0002.00 0003.00 /* Create info is supplied and the variables defined*/ 0004.00 0005.00 DCL VAR(&FILENAME) TYPE(*CHAR) LEN(11) 0006.00 DCL VAR(&MEMNAME) TYPE(*CHAR) LEN(11) 0007.00 DCL VAR(&LIBNAME) TYPE(*CHAR) LEN(11) 0008.00 DCL VAR(&MEMTYPE) TYPE(*CHAR) LEN(3)0009.00 0010.00 /* The member is created */ 0011.00 0012.00 CRTMBR: STRSEU SRCFILE(&LIBNAME/&FILENAME) + 0013.00 SRCMBR(&MEMNAME) + 0014.00 TYPE(&MEMTYPE) 0015.00 0016.00 /* Message to confirm member creation is sent */ 0017.00 0018.00 SNDUSRMSG MSG('IT''S DONE, PAPPY!')0019.00 0020.00 /* The program is ended */ 0021.00 0022.00 END: ENDPGM
22
Compilation Reports
Library
PF-SRC
CRTMBRCLP Compile
CRTMBR*PGM
CLP
CompilationReport
MSGQ
Completion M
sg
23
Compilation Reports General Information
Source Code Listing
Cross reference table
Error message summary
24
General information area Display Spooled FileFile . . . . . : COMPILEEX Page/Line 1/1Control . . . . . ________ Columns 1 - 78Find . . . . . . ______________________________ *...+....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
25
Searching the report Control field commands provide quick
movement through the spool file
P+5 Move forward 5 pagesP-5 Move backwards 5 pagesP5 Move to page 5+5 Move forward 5 lines-5 Move backwards 5 linesW+5 Move to the right 5 columnsW-5 Move to the left 5 columnsW5 Move to the fifth columnB or *BOT Move to the end of the spool fileT or *TOP Move to the beginning of the spool file
26
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
27
Source Code Listing Displays source code Error messages placed after incorrect
statements
Control Language Source SEQNBR *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 100- DCL VAR(&JOB) TYPE(*CHAR) LEN(7)* CPD0740 10 PGM command missing. 200- DCL VAR(&USR) TYPE(*CHAR) LEN(10) 300- RTVJOBA JOB(&JOB)* CPD0784 30 Variable &JOB for parameter JOB must be *CHAR, minimum length 10 400- RTVJOBA USER(&USER)* CPD0727 40 Variable '&USER ' is referred to but not declared. 500- SNDUSRMSG 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. 800- GOTO CMDLBL(END)* CPD0725 10 End of source file reached without ENDPGM command. * * * * * E N D O F S O U R C E * * * *
28
Error messages
Comprised of three parts: Error code Error message Severity level
CPD0740 10 PGM command missing.
29
Cross Reference table For every variable and label, the statement
numbers that reference each are displayed Errors messages listed here also
5763SS1 V3R2M0 960517 Control Language GRA Cross Reference Declared Variables Name Defined Type Length References &JOB 100 *CHAR 7 300 500 &USR 200 *CHAR 10* CPD0726 10 Variable '&USR ' declared but not referred to. Defined Labels Label Defined References END ****** 800* CPD0715 30 Label 'END ' does not exist. * * * * * E N D O F C R O S S R E F E R E N C E
30
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
31
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
32
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
33
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
34
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
35
Monitoring for Messages CPF9810 - library does not exist
CPF9812 - file does not exist
This MONMSG results in an error handling routine being executed
No EXEC keyword means the error will be ignored
MONMSG MSGID(CPF9810) EXEC(CRTLIB &LIBNAME)
MONMSG MSGID(CPF9812) EXEC(GOTO CMDLBL(NOFILE))
MONMSG MSGID(CPF9812)
36
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
37
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
38
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)
39
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
40
Prompt Screen The prompt screen for the following
program must have 4 data entry fields
0001.00 START: PGM PARM(&LIBNAME &FILENAME &MEMNAME &MEMTYPE) 0002.00 0003.00 DCL VAR(&FILENAME) TYPE(*CHAR) LEN(10) 0004.00 DCL VAR(&MEMNAME) TYPE(*CHAR) LEN(10) 0005.00 DCL VAR(&LIBNAME) TYPE(*CHAR) LEN(10) 0006.00 DCL VAR(&MEMTYPE) TYPE(*CHAR) LEN(3)0007.00 0008.00 CRTMBR: STRSEU SRCFILE(&LIBNAME/&FILENAME) + 0009.00 SRCMBR(&MEMNAME) + 0010.00 TYPE(&MEMTYPE) 0011.00 0011.00 SNDUSRMSG MSG('IT''S DONE, PAPPY!')0013.00 0014.00 END: ENDPGM
41
Prompt Screen Example CREATE MEMBER (CRTMBR) Type choices, press Enter. LIBRARY . . . . . . . . . . . . YOURLIB NAME SOURCE FILE . . . . . . . . . . ___________ NAME SOURCE MEMBER . . . . . . . . . ___________ NAME MEMBER TYPE . . . . . . . . . . ___ CLP RPG PF CBL LF
BottomF3=Exit F4=Prompt F5=Refresh F12=Cancel F13=How to use this display
F24=More keys
42
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
43
PARM command PARM keywords used to define a field:
KWD - defines the fields keyword
TYPE - type of data the field will accept
LEN - 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
44
Prompt Screen Source ExampleCMD 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')
45
Prompt Screen Example
CREATE MEMBER (CRTMBR) Type choices, press Enter. LIBRARY . . . . . . . . . . . . YOURLIB NAME SOURCE FILE . . . . . . . . . . ___________ NAME SOURCE MEMBER . . . . . . . . . ___________ NAME MEMBER TYPE . . . . . . . . . . ___ CLP RPG PF CBL LF
CMD PROMPT('CREATE MEMBER')
PARM KWD(TYPE) TYPE(*CHAR) LEN(3) + CHOICE('CLP RPG PF CBL LF') + PROMPT('MEMBER TYPE')
46
Creating the command - CRTCMD Create Command (CRTCMD) Type choices, press Enter. Command . . . . . . . . . . . . > CRTMBR Name Library . . . . . . . . . . . > YOURLIBXX Name, *CURLIB Program to process command . . . > CRTMBR Name, *REXX Library . . . . . . . . . . . > YOURLIBXX Name, *LIBL, *CURLIB Source file . . . . . . . . . . QCMDSRC Name Library . . . . . . . . . . . > YOURLIBXX Name, *LIBL, *CURLIB Source member . . . . . . . . . CRTMBR Name, *CMD Text 'description' . . . . . . . *SRCMBRTXT
Command to be created Program that will be called Prompt screen to display (source definition)
47
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