You are on page 1of 38

Objectives

Explain general programming concepts Explain CLs 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

Creating CL Programs
Library

Programmer CL Commands SEU

PF-SRC

CRTMBR *PGM CLP Compile

CRTMBR CLP
3

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.

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
5

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


6

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
7

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)
8

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)

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. */


10

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
Data Program Data Printout

Operating System

Storage

Data

Data

User
11

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 PARM(&CUSTNAME &ORDAMT)
12

CALL pgm1 (chardata numeric chardata.)

PGM

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 dont 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.


13

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


14

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
********************** &ORDAMT) TYPE(*CHAR) LEN(15) TYPE(*DEC) LEN(9 2)
15

*************** Beginning of data 0001.00 PGM PARM(&CUSTNAME 0002.00 DCL VAR(&CUSTNAME) 0003.00 DCL VAR(&ORDAMT)

Retrieving Data from OS/400

RTVSYSVAL - retrieves and stores system parameter values in program variables:


Date Time System

Default Printer RTNVAR(&CURTIME)

RTVSYSVAL

SYSVAL(QTIME)

RTVJOBA - retrieves and stores job information in program variables:


Job

name User running job Output queue RTVJOBA USER(&USERID)


16

Sending Data to a User

SNDUSRMSG - sends a message to the person running the program or a specified users message queue
MSG('I''ll be back')

SNDUSRMSG

SNDUSRMSG

MSG(&CUSTNAME) MSGTYPE(*INFO) + TOUSR(INTRO99)

You can build complex messages combining static text and program variables by using string functions
17

String Functions

Concatenation - joins two strings together


*CAT *TCAT *BCAT

- eliminates trailing spaces - one trailing space between strings *CAT &CURTIME) *TCAT &CURTIME) *BCAT &CURTIME)

SNDUSRMSG SNDUSRMSG SNDUSRMSG

MSG('I''ll be back at MSG('I''ll be back at MSG('I''ll be back at

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
18

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.


*BCAT &NOSECTIME)

CHGVAR VAR(&NOSECTIME) VALUE(%SST(&CURTIME 1 5)


SNDUSRMSG MSG('I''ll be back at

Results in:
I'll be back at 14:09

19

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

CL Program
START:
DCL DCL DCL DCL

PGM PARM(&LIBNAME &FILENAME &MEMNAME &MEMTYPE)

/* Create info is supplied and the variables defined*/ VAR(&FILENAME) VAR(&MEMNAME) VAR(&LIBNAME) VAR(&MEMTYPE) TYPE(*CHAR) TYPE(*CHAR) TYPE(*CHAR) TYPE(*CHAR) LEN(10) LEN(10) LEN(10) 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: ENDPGM

*/
20

Compilation Reports
Library

PF-SRC

CRTMBR *PGM CLP

MSGQ
Compilation Report

CRTMBR CLP

Compile

21

Compilation Reports

General Information Source Code Listing

Cross reference table


Error message summary

22

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
23

Searching the report

Control field commands provide quick movement through the spool file
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

P+5 P-5 P5 +5 -5 W+5 W-5 W5 B or *BOT T or *TOP

24

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

25

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 * * * *
26

Error messages

Comprised of three parts:


Error

code Error message Severity level

CPD0740

10

PGM command missing.

27

Cross Reference table


For every variable and label, the statement numbers that reference each are displayed Errors messages listed here also
Control Language Cross Reference Type *CHAR *CHAR Length References 7 300 500 10 ' declared but not referred to. GRA

5763SS1 V3R2M0 960517 Declared Variables Name Defined &JOB 100 &USR 200 * CPD0726 10 Variable '&USR Defined Labels Label Defined END ****** * CPD0715 30 Label 'END * * * *

References 800 ' does not exist. * E N D O F C R O S S

R E F E R E N C E
28

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


29

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
30

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
31

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
32

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 DCLs:
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


33

Monitoring for Messages

CPF9810 - library does not exist CPF9812 - file does not exist This MONMSG results in an error handling routine being executed
MONMSG MSGID(CPF9812)

MONMSG MSGID(CPF9810) EXEC(CRTLIB &LIBNAME)

MONMSG MSGID(CPF9812) EXEC(GOTO CMDLBL(NOFILE))

No EXEC keyword means the error will be ignored


34

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

35

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

36

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)
37

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

38