0% found this document useful (0 votes)
260 views

CLP Ppts

This document provides an overview of control language (CL) programming in IBM i. It discusses basic CL concepts like command syntax, program structure, variables, and flow control. It also covers advanced topics such as display file operations, inter-program communication, date conversion, and data area programming. Finally, it outlines message programming and how to create user-written tools and utilities that utilize databases and commands.

Uploaded by

sangili2005
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
260 views

CLP Ppts

This document provides an overview of control language (CL) programming in IBM i. It discusses basic CL concepts like command syntax, program structure, variables, and flow control. It also covers advanced topics such as display file operations, inter-program communication, date conversion, and data area programming. Finally, it outlines message programming and how to create user-written tools and utilities that utilize databases and commands.

Uploaded by

sangili2005
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 64

Control Language Programming

1. Introduction to Basic CL programming


2. Advanced facilities of CL programs
3. Message Programming and User written tools
4. User Defined Commands
1. Introduction to Basic CL Programming

• Control Language – Features


• CL Command Syntax
• CL Program Structure
• Declare CL Variable
• Conditional Execution
• Branching Within and Outside
• Changing value of a variable
• Concatenation
• %substring
• Local data area
Control Language - Features

• CL Commands
Consistent Interface
Prompting and Help
• CL Programs
Better performance
Manage Exceptions
Sequence of Application Program
Front End to Application Programs
Programmer / Operator Tools
CL Command Syntax 1

[?] [label-name:] [library-name /] command-name param-set

[] Optional
?... Prompt, F4
Label-name Branching, Breakpoints and Traces
Library-name Commands are in QSYS

LABEL1: DSPLIB LIB(PAYLIB) OUTPUT(*PRINT)


CL Command Syntax 2

Keyword Form
DSPLIB LIB(PAYLIB) OUTPUT(*PRINT)
DSPLIB OUTPUT(*PRINT) LIB(PAYLIB)

Positional Form
DSPLIB PAYLIB *PRINT

Combination Form
DSPLIB PAYLIB OUTPUT(*PRINT)
CL Command Syntax 3

SNDUSRMSG MSG(‘Today”s balance is ‘ *CAT &BAL) +

MSGTYPE(*INFO) /*Show Balance*/

SNDRCVF DEV(*FILE) RCDFMT(MENUFMT)

SNDRCVF *N MENUFMT
CL Program Structure

PGM
DCLF
DCL
MONMSG
IF ELSE
MONMSG
ENDPGM
Declare CL Variable

DCL VAR(&NAME) TYPE( ) LEN( ) VALUE( )

TYPE( ) LEN( ) VALUE( )


*DEC Default (15 5) Default (0)
Max (15 9)
*CHAR Default (32) Default ( )
Max (9999)
*LGL 1 Default (‘0’)

DCL &A *LGL VALUE(‘1’)


DCL &B *CHAR 5 ABCD
DCL &C *DEC(6 2) 0543.21
Conditional Execution

IF COND(Relational/logical) THEN(COMMAND)
ELSE CMD(command)
Operators
< *LT
= *EQ
<= *LE
>= *GE
¬< *NL
¬> *NG
¬= *NE
& *AND
| *OR
IF Examples

IF COND(&RESP *EQ 5) THEN(CALL PGM(CUSINQ)


IF (&RESP *EQ 5) CALL CUSINQ

IF COND(&AMT *GT 1000) THEN(CALL BIG)


ELSE CMD(CALL SMALL)

IF (&A *NE &B) RETURN

IF (&A = &B)
ELSE RETURN

IF &IN03 RETURN
DO Group

IF COND(&A *GT 200) THEN(DO)


CALL PGM1
CALL PGM2
ENDDO
ELSE CMD(DO)
CALL PGM3
CALL PGM4
ENDDO
CALL PGM5
Nested IF

IF COND(&RESP = 1) THEN(IF COND(&A = 5) +


THEN(IF COND(&B = N) THEN(CALL PGM(PGMA))))

IF (&RESP = 1) IF (&A = 5) IF (&B = 7) CALL PGMA

IF COND(&RESP = 1) THEN(DO)
IF COND(&A = 5) THEN(DO)
IF COND(&B = 7) THEN(DO)
CALL PGMA
ENDDO
ENDDO
ENDDO

IF COND((&RESP = 1) *AND (&A = 5) *AND (&B = 7) +


THEN(CALL PGMA)
Branching Within

PGM
STRT: SNDRCVF RCDFMT(MENU)
:
:
IF (&OPTION = 12 ) GOTO CMDLBL(END)
:
:
END: ENDPGM
Branching Outside
PGMA PGMB PGMC
PGM PGM PGM

: : :

CALL PGMB CALL PGMC :

………….. :………….. ENDPGM

: TRFCTL PGMD
:

PGM
: PGMD
RETURN
CHGVAR

CHGVAR VAR(CL-VARIABLE) VALUE( OPERAND OPERATOR OPERAND)

CHGVAR VAR(&AMT) VALUE(-43.25)

CHGVAR VAR(&COUNT) VALUE(&COUNT + 1)

CHGVAR &TOTAL (&QTY * ( &PRICE * &QTY))


Concatenation

&FIRST &LAST &NAME

ASHOK *CAT GUPTA ASHOK GUPTA

ASHOK *TCAT GUPTA ASHOKGUPTA

ASHOK *BCAT GUPTA ASHOK GUPTA

CHGVAR VAR(&NAME) VALUE(&FIRST *BCAT &LAST)


Concatenation Example

Customer WIPRO TECHNOLOGIES, account number 54321, is


overdue by 030 days.
PGM
DCL &CUSNAME *CHAR 25 ‘WIPRO TECHNOLOGIES’
DCL &CUSNUM *DEC (5 0) 54321
DCL &CUSNUMALPH *CHAR 5
DCL &DAYS *DEC (3 0) 30
DCL &DAYSALPH *CHAR 3
CHGVAR &DAYSALPH &DAYS
CHGVAR &CUSNUMALPH &CUSNUM
SNDMSG MSG(‘Customer’ *BCAT &CUSNAME +
*TCAT ‘, account number’ *BCAT &CUSNUMALPH +
*CAT ‘is overdue by’ *BCAT &DAYSALPH +
*BCAT ‘days.’) TOMSGQ(ARDEPTQ)
ENDPGM
%SUBSTRING Example

PGM
DCL VAR(&TEAM) TYPE(*CHAR) VALUE(ABCDEFGHIJKL)
DCL VAR(&LIB) TYPE(*CHAR) LEN(6) VALUE(IWLIBX)
DCL VAR(&X) TYPE(*DEC) LEN(2 0) VALUE(1)

ST: CHGVAR VAR(%SUBSTRING(&LIB 6 1)) +


VALUE(%SUBSTRING(&TEAM &X 1))
SAVLIB LIB(&LIB)

IF COND(&LIB = ‘IWLIBL’) THEN(GOTO END)


CHGVAR VAR(&X) VALUE(&X + 1)
GOTO ST

END: ENDPGM
%SUBSTRING Example

CALL PGMA PARM(‘ABCDEFGHIJKLMNO’)

PGM PARM(&STRING)
DCL &WS *CHAR 3
DCL &STRING *CHAR 15
DCL &X *CHAR 1

ST: CHGVAR &X %SUBSTRING(&STRING 1 1)

CHGVAR &WS (‘WS’ *CAT &X)


IF COND(&WS = ‘WS ’) THEN(GOTO END)
SNDMSG MSG(‘MEETING AT 5.00 PM’) TOMSGQ(&WS)
CHGVAR &STRING %SUBSTRING(&STRING 2 14)
GOTO ST
END: ENDPGM
Local Data Area

PGM
CHGVAR VAR(%SST(*LDA 6 10)) VALUE(TALENT)
or
CHGDTAARA DTAARA(*LDA (6 10)) VALUE(TALENT)
CALL PGMB
ENDPGM

PGM
DCL VAR(&FILE) TYPE(*CHAR) LEN(10)
CHGVAR VALUE(%SST(*LDA 6 10)) VAR(&FILE)
or
RTVDTAARA DTAARA(*LDA (6 10)) RTNVAR(&FILE)
ENDPGM
2. Advanced facilities of CL Programs

• Using Display File


• Display File Operations
• Inter program communication
• Job switches
• Retrieving external attributes
• Convert date
• Data area objects
• Data area programming
• Prompting for command
Using Display File

PGM
DCLF FILE(INQDSP)
START: SNDRCVF RCDFMT(INQFMT)
IF &IN03 RETURN
ELSE IF (&CHOICE *EQ ‘1’) CALL INQCUS
ELSE IF (&CHOICE *EQ ‘2’) CALL INQITM
ELSE IF (&CHOICE *EQ ‘3’) CALL INQSUP
ELSE IF (&CHOICE *EQ ‘90’) SIGNOFF
GOTO START
ENDPGM
DISPLAY FILE OPERATIONS

DCLF FILE(INQDSP)

SNDF RCDFMT(INQFMT)

RCVF RCDFMT(INQFMT)

SNDRCVF RCDFMT(INQFMT) WAIT(*NO *YES)


:
:
WAIT
Inter Program Communication

PGM
DCL VAR(&COUNT) TYPE(*DEC) LEN(3 0)
:
:
CALL PGM(PGMA) PARM(‘0’ &COUNT 100 ‘WIPRO LTD.’)
:
:

PGM PARM(&IN99 &COUNTX &Y &C0)


DCL VAR(&IN99) TYPE(*LGL)
DCL &COUNTX *DEC (3 0)
DCL &Y *DEC (15 5)
DCL &CO *CHAR (20)
:
CHGVAR VAR(&COUNTX) VALUE(&COUNTX + 1)
:
JOB SWITCHES

• Program to program communication within a job


• Temporary
• Initially set by job description
• Use mask to test or check
1 = on, 0 = off, X=ignore
• %SWITCH(mask) can be used as a logical variable

IF (%SWITCH(10XXXXX0)) CALL REPORT


IF (&BALANCE > 0) CHGJOB SWS(‘1XXXXXXX’)
CHGVAR &IN03 %SWITCH(00000001)
Retrieving External Attributes

• Job Attributes
• System Values
• User Profile
• Group Attributes
• Configuration Status
• Network Attributes

PGM
DCL &TIME *CHAR 6
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME)
CHGJOB …..
RTVJOBA and CHGJOB

PGM
DCL VAR(&QNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&JOB) TYPE(*CHAR) LEN(10)
RTVJOBA OUTQ(&QNAME) OUTQLIB(&LIB) JOB(&JOB)
CHGJOB OUTQ(ORDLIB/ORDOUTQ)
CALL PGM(ORDER)
CHGJOB OUTQ(&LIB/&QNAME)
SNDMSG MSG(‘Orders sent to ORDOUTQ output queue.’) +
TOMSGQ(&JOB)
ENDPGM
CONVERT DATE

CVTDAT DATE( constant or variable) TOVAR(CL variable)

*JOB *JOB
*SYSVAL *SYSVAL
*MDY *MDY
FROMFMT *DMY TOFMT *DMY
*YMD *YMD
*JUL *JUL
etc. etc.
*JOB
TOSEP *SYSVAL
*NONE
Separator CHAR
CVTDAT Command

PGM
DCL VAR(&NAME) TYPE(*CHAR) LEN(10)
DCL VAR(&DATE) TYPE(*CHAR) LEN(6)
DCL VAR(&JULIAN) TYPE(*CHAR) LEN(5)
RTVSYSVAL QDATE &DATE
CVTDAT DATE(&DATE) FROMFMT(*SYSVAL) +
TOVAR(&JULIAN) TOFMT(*JUL) +
TOSEP(*NONE)
CHGVAR &NAME (‘MAST’ *CAT &JULIAN)
ADDPFM MASTER &NAME
OVRDBF MASTER &NAME
CALL PGM(LIBRARY)
ENDPGM
Data Area Objects

• Next sequential number – invoices, checks etc


• Name - ‘Wipro Infotech Limited’
• Better than a *FILE for storing small amount of information

CRTDTAARA DTAARA(name) TYPE( ) LEN( ) VALUE( )

DSPDTAARA DTAARA(name)

CHGDTAARA DTAARA(name (start length)) VALUE( )

RTVDTAARA DTAARA(name (start length)) RTNVAR(CL VAR)


Data Area Programming

CRTDTAARA DTAARA(ORDNO) TYPE(*DEC) LEN(5 0) VALUE(1)

PGM
DCLF ORDER
DCL &ORD *DEC (5 0)
SNDRCVF RCDFMT(ORDFMT)
ALCOBJ OBJ((ORDNO *DTAARA *EXCL))
RTVDTAARA ORDNO RTNVAR(&ORD)
CHGVAR &ORD (&ORD + 1)
CHGDTAARA ORDNO (&ORD)
DLCOBJ OBJ((ORDNO *DTAARA *EXCL))
CALL ORDRWRITE (&NAME &AMT &ORD)
ENDPGM
Prompting for Command

?SNDMSG
?SNDMSG TOMSGQ(QSYSOPR)

Enter Value Shown Protected Value to CPP Highlighted


??KEYWORD( ) Default No Default No
??KEYWORD(VALUE) Value No Value Yes
?*KEYWORD( ) Default Yes Default No
?*KEYWORD(VALUE) Value Yes Value Yes
?-KEYWORD( ) None N/A Default N/A
?-KEYWORD(VALUE) None N/A Value N/A
3. Message Programming and User written
tools
• Predefined message and immediate message
• Message types
• Managing exceptions
• Reply messages
• System reply list
• User written utility
• Using database file
• Commands without an outfile parameter
Messages

• Predefined Message Immediate Message


Control Language Control Language
SNDUSRMSG SNDUSRMSG
SNDPGMMSG SNDPGMMSG
RTVMSG SNDMSG
SNDBRKMSG
Display Files Display Files
ERRMSGID ERRMSG
SFLMSGID SFLMSG
MSGCON
MSGID
Predefined Messages

• Creation
CRTMSGF MSGF(INVMSGF) SIZE( ) AUT( ) TEXT( )

• Maintenance
ADDMSGD
CHGMSGD
DSPMSGD
RMVMSGD
Predefined Message

PGM
DCL &COUNT *DEC (3 0)
DCL &COUNTA *CHAR 3
DCL &FILE *CHAR 10
:
CHGVAR COUNTA COUNT
SNDUSRMSG MSGID(WIP0001) MSGF(WIPRO) +
TOMSGQ(*EXT) MSGDTA(&COUNTA *CAT &FILE) +
MSGTYPE(*INFO)
:
ENDPGM

500 Participants have joined the programme of WASE


Message Types

• Informational
• Inquiry
• Completion
• Diagnostic
• Escape
• Status
• Notify
Managing Exceptions

• MONMSG
– PROGRAM LEVEL
– COMMAND LEVEL

MONMSG MSGID( ) CMPDTA( ) EXEC( )

MSGID(CPF0864)
MSGID(CPF1700)
MSGID(CPF0000)
MONMSG - Example

PGM
DCL &NO *DEC
:
X: ?SNDMSG
MONMSG(CPF6801) EXEC(DO)
CHGVAR VAR(&NO) (&NO + 1)
IF (&NO = 3) THEN(RETURN)
ELSE CMD(GOTO X)
ENDDO
:
ENDPGM
MONMSG - CHKOBJ

CHKOBJ OBJ(object-name) OBJTYPE(type) +


MBR(*none/ *first / file-name) +
AUT(rights)

Example :
1. CHKOBJ OBJ(SCHLIB/COURSE) *PGM
MONMSG …………………

2. CHKOBJ VENDOR *FILE VENDOR *DLT


MONMSG ……………………..
Reply Messages

• Automatic reply to system generated inquiry message


• Different than default
• Job Description

STRPRTWTR DEV( )

Default reply : H Automatic : I


Reply Messages

INQMSGRPY INQMSGRPY INQMSGRPY


*RQD *SYSRPYL *DFT

NO
MATCH

REPLY REPLY REPLY


*RQD ‘reply’ *DFT

YES
DLVRY(*DFT)

SNDUSRMSG DEFAULT
OPERATOR REPLY
SYSTEM REPLY LIST

SEQ NBR MSGID REPLY DUMP COMPARE VALUE

10 CPA2402 I *NO
20 CPA3138 I *NO
30 RPG1241 G *NO
PRCHMST
35 CPA3394 I *NO
40 RPG1400 *DFT *NO
9999 *ANY *RDQ *YES

ADDRPYLE
CHGRPYLE
RMVRPYLE
WRKRPYLE
Reply Messages -Example

PGM PARM(&PRINT)
DCL &PRINT *CHAR LEN(10)
CRTLIB LEARN
ADDLIBL LEARN *FIRST
CRTDUPOBJ QSPLPRTW QGPL *JOBD LEARN
CHGJOBD LEARN/QSPLPRTW *SYSRPYL
STRPRTWTR &PRINT
RMVLIBLE LEARN
DLTLIB LEARN
ENDPGM
User Written Utility

PGM
DCLF ……….
DSPxxx OUTPUT(*OUTFILE) OUTFILE(WASE) +
OUTMBR(*FIRST *REPLACE)
OVRDBF
ST: RCVF WASE
MONMSG CPD0864 RETURN
:
:
GOTO ST
ENDPGM
DATABASE FILE

PGM
DCLF FILE(ibm-file)
DSPxxx OUTPUT(*OUTFILE) OUTFILE(user-file) OUTMBR(*FIRST *REPLACE)
OVRDBF FILE(ibm-file) TOFILE(user-file)
RCVF
:
ENDPGM

OR

DSPxxx OUTPUT(*OUTFILE) OTUFILE(user-file) OUTMBR(*FIRST *REPLACE)

PGM
DCLF FILE(user-file)
DSPxxx OUTPUT(*OUTFILE) OUTFILE(user-file) OUTMBR(*FIRST *REPLACE)

RCVF
:
ENDPGM
DATABASE FILE SEQUENCE

• Declare File
– Single Format – PF, LF
– One per program
• Open File
– RCVF
– Input only
• Read next record
• Check for EOF
• File Close
– EOF
– RETURN, TFRCTL
Utility - Example

PGM PARM(&NAME &LIB)


DCL &NAME *CHAR 10
DCL &LIB *CHAR 10
DCLF QSYS/QADSPOBJ
DSPOBJD OBJ(&LIB/*ALL) OBJTYPE(*FILE *PGM) +
OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPOBJD)
OVRDBF QADSPOBJ TOFILE(QTEMP/DSPJOBD)
ST: RCVF
MONMSG CPF0864 RETURN
GRTOBJAUT OBJ(&ODLBNM/&ODOBNM) +
OBJTYPE(&ODOBTP) USER(&NAME) AUT(*CHANGE)
GOTO ST
ENDPGM
COMMANDS WITHOUT AN OUTFILE
PARAMETER
• DSPSYSSTS

• WRKSYSSTS

• SPOOL FILE

• COPY THE SPOOL FILE


4. User Defined Commands

• Creation of user defined command


• Command Definition Statements
• PARM statement
• QUAL statement
• Dependent Relationship
• Conditional Prompting
• Examples
• Command Execution
User Defined Commands

• Simplify entering parameters


– Default values
– Prompting
– Validity checking
– Help
• Functions like IBM command

CALL LIST PARM(NAME LIB)

USRCMD KWD1( ) KWD2( )


Creation of Command

• Enter source statements for the program

• Create the program

• Enter the command definition source statements

• Create the command


Create Command

CMD : name
PGM : name
SRCFILE: QCMDSRC
SRCMBR: *CMD
VLDCKR: *none, name
MODE : *ALL, *PROD, *DEBUG, *SERVICE
ALWLMTUSR : *NO, *YES
ALLOW: *ALL, *BPGM, *IPGM, *BATCH, *INTERACT
PMTFILE: *none
MSGF: QCPFMSGF
Command Execution

• No Validity Checker Program

– Command

– OS/400 Comman analyzer

– Check parameters

– Command processing program


Command Definition Statements

• CMD Specified prompt text for command


• PARM Defines parameter for the command
• ELEM Defines an element in a list used as parameter
value
• QUAL Defines a qualifier of a name used as
parameter
• DEP Defines a relationship among parameters
• PMTCTL Defines the conditions under which certain
parameters are prompted
Command Example

CMD PROMPT(‘Printing Address Labels’)

PARM KWD(EMPNO) TYPE(*DEC) LEN(5 0) +


MIN(1) PROMPT(‘Employee Number’)

PARM KWD(COUNT) TYPE(*DEC) LEN(3) +


DFT(30) RANGE(10 90) +
PROMPT(‘Number of Address’)

PARM KWD(ALIGN) TYPE(*CHAR) LEN(3) +


RSTD(*YES) DFT(TWO) SPCVAL((ONE) +
(TWO) ( 1 ONE) (2 TWO)) +
PROMPT(‘Number of Address labels Across’)
PARM STATEMENT

KWD Maximum of 10 characters


TYPE *DEC, *CHAR, *LGL etc
LEN Size of field
MIN (0) (1) Optional or Mandatory
FULL Like CHECK(MF) in DDS
REL (*GT 500)
RANGE (10 200)
RSTD Restricted to one of the specific values
VALUES List of constants
SPCVAL Translation from user to program expectation
PARM STATEMENT

SNGVAL Allows a single value to replace a list


DFT Default value for the parameter
EXPR Whether an expression can be entered
ALWVAR Allow variable name for the parameter
PGM The parameter is the name of a program, data area
DTAARA or file name for the command processing program
FILE
PROMPT Text for the parameter
PMTCTL Conditional prompting
CHOICE Parameter Choices
CHOICEPGM Program to supply parameter choices
QUAL STATEMENT

PARAM KWD(NAME) TYPE(NAME1) …….

NAME1: QUAL TYPE(*NAME)


QUAL TYPE(*NAME)

*NAME
TYPE *GENERIC
*CHAR
QUAL STATEMENT - Example

CMD PROMPT(‘Check Object Existence’)


PARM KWD(OBJ) TYPE(OBJ1) MIN(1) PROMPT(‘Object Name’)

OBJ1: QUAL TYPE(*NAME)


QUAL TYPE(*NAME) MIN(0) SPCVAL((*LIBL) +
DFT(*LIBL) PROMPT(‘Library Name’)

PGM PARM(&OB)
DCL &OB *CHAR 20
DCL &LIB *CHAR 10
DCL &OBNAME *CHAR 10
CHGVAR &OBNAME %SST(&OB 1 10)
CHGVAR &LIB %SST(&OB 11 10)
WRKOBJ &LIB/&OBNAME
ENDPGM
Dependent Relationship

• Specify the controlling conditions


• Specify the parameter relationships
• Specify the number of parameter relationship
• Specify the message identifier of an error message

DEP CTL(&TYPE *EQ LIST) PARM(ELIST)


DEP CTL(*ALWAYS) PARM((&WTR *NE +
&NEWWTR)) MSGID(USR0001)
DEP CTL(FILE) PARM(VOL LABEL) +
NBRTRUE(*EQ 2)
Conditional Prompting

CMD
PARM KWD(OUTPUT) TYPE(*CHAR) LEN(1) RSTD(*YES) +
SPCVAL((*PRINT P) (*OUTFILE F) (P) (F))
PARM KWD(OUTFILE) TYPE(*NAME) PMTCTL(OUTFILE)
PARM KWD(OUTMBR) TYPE(*NAME) PMTCTL(OUTFILE)
PARM KWD(OUTQ) TYPE(*NAME) PMTCTL(PRINT)

OUTFILE: PMTCTL CTL(OUTPUT) COND((*EQ F))


PRINT: PMTCTL CTL(OUTPUT) COND((*EQ P))
Command Execution

• Validity checker
– Command
– Command analyzer
– Check parameters
– Validity checking program
• Execute the validity checking program
• Check the values
• Call the command processing program
CRTCLPGM command

• CRTCLPGM take F4

You might also like