Top Banner
1 Intro to the AS/400 Chapter 5 - CL Programming right 1999 by Janson Industries
47

Rev Chapter 5 - C L Programming

Oct 15, 2014

Download

Documents

anupgiri
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Rev Chapter 5 - C L Programming

1

Intro to the AS/400Chapter 5 - CL Programming

Copyright 1999 by Janson Industries

Page 2: Rev Chapter 5 - C L Programming

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

Page 3: Rev Chapter 5 - C L Programming

3

Creating CL Programs

Library

PF-SRC

CRTMBRCLP

Compile

CRTMBR*PGM

CLP

SEU

Programmer

CLCommands

Page 4: Rev Chapter 5 - C L Programming

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

Page 5: Rev Chapter 5 - C L Programming

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.

Page 6: Rev Chapter 5 - C L Programming

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

Page 7: Rev Chapter 5 - C L Programming

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

Page 8: Rev Chapter 5 - C L Programming

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

Page 9: Rev Chapter 5 - C L Programming

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)

Page 10: Rev Chapter 5 - C L Programming

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)

Page 11: Rev Chapter 5 - C L Programming

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

Page 12: Rev Chapter 5 - C L Programming

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

Page 13: Rev Chapter 5 - C L Programming

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)

Page 14: Rev Chapter 5 - C L Programming

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:

Page 15: Rev Chapter 5 - C L Programming

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

Page 16: Rev Chapter 5 - C L Programming

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)

Page 17: Rev Chapter 5 - C L Programming

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)

Page 18: Rev Chapter 5 - C L Programming

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)

Page 19: Rev Chapter 5 - C L Programming

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

Page 20: Rev Chapter 5 - C L Programming

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

Page 21: Rev Chapter 5 - C L Programming

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

Page 22: Rev Chapter 5 - C L Programming

22

Compilation Reports

Library

PF-SRC

CRTMBRCLP Compile

CRTMBR*PGM

CLP

CompilationReport

MSGQ

Completion M

sg

Page 23: Rev Chapter 5 - C L Programming

23

Compilation Reports General Information

Source Code Listing

Cross reference table

Error message summary

Page 24: Rev Chapter 5 - C L Programming

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

Page 25: Rev Chapter 5 - C L Programming

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

Page 26: Rev Chapter 5 - C L Programming

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

Page 27: Rev Chapter 5 - C L Programming

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

Page 28: Rev Chapter 5 - C L Programming

28

Error messages

Comprised of three parts: Error code Error message Severity level

CPD0740 10 PGM command missing.

Page 29: Rev Chapter 5 - C L Programming

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

Page 30: Rev Chapter 5 - C L Programming

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

Page 31: Rev Chapter 5 - C L Programming

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

Page 32: Rev Chapter 5 - C L Programming

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

Page 33: Rev Chapter 5 - C L Programming

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

Page 34: Rev Chapter 5 - C L Programming

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

Page 35: Rev Chapter 5 - C L Programming

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)

Page 36: Rev Chapter 5 - C L Programming

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

Page 37: Rev Chapter 5 - C L Programming

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

Page 38: Rev Chapter 5 - C L Programming

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)

Page 39: Rev Chapter 5 - C L Programming

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

Page 40: Rev Chapter 5 - C L Programming

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

Page 41: Rev Chapter 5 - C L Programming

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

Page 42: Rev Chapter 5 - C L Programming

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

Page 43: Rev Chapter 5 - C L Programming

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

Page 44: Rev Chapter 5 - C L Programming

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

Page 45: Rev Chapter 5 - C L Programming

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

Page 46: Rev Chapter 5 - C L Programming

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)

Page 47: Rev Chapter 5 - C L Programming

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