Вы находитесь на странице: 1из 47

Intro to the AS/400

Chapter 5 - CL Programming

Copyright 1999 by Janson Industries

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

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.

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

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
 

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
12

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

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.


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

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

RTVSYSVAL


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
MSG('I''ll be back') MSG(&CUSTNAME) MSGTYPE(*INFO) + TOUSR(INTRO99)

SNDUSRMSG SNDUSRMSG

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

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

*/
21

Compilation Reports
Library

PF-SRC

CRTMBR *PGM CLP

MSGQ
Compilation Report

CRTMBR CLP

Compile

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

25

Find Area


Allows you to search for a character string within the compilation report Case sensitive To find a string:
the text in the find area  Press F16
 Enter

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:


code  Error message  Severity level
 Error

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

performed regardless of the program statement causing the error performed only if the preceding command caused the specified error
34

If MONMSG follows a command:


 EXEC

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


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


The prompt screen for the following program must have 4 data entry fields

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:

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 ENDPGM MSG('IT''S DONE, PAPPY!')

40

Prompt Screen Example


CREATE MEMBER (CRTMBR) Type choices, press Enter. LIBRARY . . . SOURCE FILE . SOURCE MEMBER MEMBER TYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . YOURLIB ___________ ___________ ___ NAME NAME NAME CLP RPG PF CBL LF

F3=Exit

F4=Prompt

F5=Refresh

F12=Cancel

Bottom F13=How to use this display


41

F24=More keys

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 of data the field will accept

 TYPE  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 - defines a default value for the field
43

 DFT

 VALUES/RSTD

- identifies the only valid values for the field

Prompt Screen Source Example


CMD PARM PROMPT('CREATE MEMBER') KWD(LIB) TYPE(*CHAR) LEN(11) + CHOICE('NAME') + PROMPT('LIBRARY') DFT(YOURLIB) KWD(FILE) TYPE(*CHAR) LEN(11) + CHOICE('NAME') + PROMPT('SOURCE FILE') KWD(MBR) TYPE(*CHAR) LEN(11) + CHOICE('NAME') + PROMPT('SOURCE MEMBER') KWD(TYPE) TYPE(*CHAR) LEN(3) + CHOICE('CLP RPG PF CBL LF') + PROMPT('MEMBER TYPE')

PARM

PARM

PARM

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