PARAMETER PASSING TECHNIQUE:-
C5 [
calling program && called program ]
(Calling
program)
0001.00 PGM
0002.00
/* CALLING PROGRAM */
0003.00 DCL VAR(&A) TYPE(*DEC) LEN(5)
VALUE(1000)
0004.00 DCL VAR(&B) TYPE(*DEC) LEN(5)
VALUE(3000)
0005.00 CALL PGM(PRA1/CLP2) PARM(&A &B)
0006.00 ENDPGM
(Called
Program)
0001.00 PGM PARM(&X &Z)
0002.00 /* CALLED PROGRAM */
0003.00
DCL VAR(&X) TYPE(*DEC)
LEN(5) /* try with this if any error occurs give len(15 5)
0004.00
DCL VAR(&Z) TYPE(*DEC) LEN(5)
0005.00
DCL VAR(&L) TYPE(*DEC)
LEN(6)
0006.00
DCL VAR(&D) TYPE(*CHAR)
LEN(10)
0007.00
CHGVAR VAR(&L) VALUE(&X + &Z)
0008.00
CHGVAR VAR(&D) VALUE(&L)
0009.00
SNDPGMMSG MSG(&D) TOPGMQ(*PRV CLP1)
0010.00 ENDPGM
1ST + 2ND
=PARAMETER PASSING
CLP0023
(Called
program)
0001.00 PGM PARM (&X)
0002.00 DCL VAR(&X) TYPE(*DEC) LEN(15 5)
0003.00 DCL VAR(&F) TYPE(*CHAR) LEN(10)
0004.00 CHGVAR VAR(&F)
VALUE(&X)
0005.00 SNDPGMMSG MSG(&F)
0006.00 ENDPGM
(Calling
Program)
1.00 PGM
2.00 CALL PGM (CLP/CLP4) PARM (123.456)
3.00 ENDPGM
CLP123
0001.00 PGM
0002.00 CALL PF100
0003.00 ENDPGM
DISPLAY FILES
addition
a : 3333-
b : 3333-
sum : 6666
program
enter number a : 99-
enter number b : 99-
main screen :
1 . factorial
2 . swapping
3 . sum
choice ch : 3-
enter any number : 99-
enter 2nd num for swapping b :
99-
result : 9999-
Note:- for display files
1) Strsda (start source design aid).
2) For decimals .
+3(x)
for input type.
+6(x)
for output type.
+9(x)
for both input &&
output type.
3) For
characters.
+I(x)
for input type.
+o(x)
for output type.
+b(x)
for both input && output type.
DATA
AREAS
1) Permanent Data area
2) Temporary Data area
Temporary data areas are
created by o/s & destroyed by o/s as soon as that job is completed.
Permanent data areas are of
3 types:-
1) Character data area
2) Decimal data area
3) Logical data area
Commands related to data
area
1) CRTDTAARA
2) DSPDTAARA
3) CHDDTAARA
4) RTVDTAARA RTNVAR(&VAR)
Examples
CRTDTAARA
<f4>
Data
area name: - pra
Library:
- Praveen
Type:
- *DEC
Length:
- 4
Decimal
positions: 0
Initial
value: 1234
CRTDTAARA
<f4>
Data
area name: - ramu
Library:
- Praveen
Type:
- *CHAR
Length:
- 10
Initial
value: - srsoft
CRTDTAARA
<f4>
Data
area name: - somu
Library:
- Praveen
Type:
- *LGL
Length:
- 1
Initial
value 0
DECIMAL DATA AREA
PGM
DCL
VAR (&A) TYPE (*DEC) LEN (4 0)
DCL
VAR (&B) TYPE (*CHAR) LEN (10)
RTVDTAARA DTAARA (PRAVEEN/PRA) RTNVAR (&A)
CHGVAR
VAR (&A) VALUE (&A+1)
CHGVAR
VAR (&B) VALUE (&A)
SNDPGMMSG
MSG (&B)
ENDPGM
CHARACTER DATA AREA
PGM
DCL
VAR (&A) TYPE (*CHAR) LEN (10)
CHGDTAARA
DTAARA (PRAVEEN/RAMU) VALUE (DOCTOR)
RTVDTAARA
DTAARA (PRAVEEN/RAMU) RTNVAR (&A)
SNDPGMMSG
MSG (&A)
ENDPGM
LOGICAL DATA AREA
PGM
DCL
VAR (&A) TYPE (*LGL) LEN (1)
DCL
VAR (&B) TYPE (*DEC) LEN (4 0)
DCL
VAR (&C) TYPE (*CHAR) LEN (10)
RTVDTAARA
DTAARA (PRAVEEN/SOMU) RTNVAR (&A)
IF
COND (&A = ‘1’) THEN (DO)
CHGVAR
VAR (&B) VALUE (1000)
ENDDO
ELSE
(DO)
CHGVAR
VAR (&B) VALUE (2000)
ENDDO
CHGVAR
VAR (&C) VALUE (&B)
SNDPGMMSG
MSG (&C)
ENDPGM
DATA QUEUE
Data queues
are permanent. It can store up to 1 to 64,512 bytes.
While creating
Data Queue, we cannot give initial value. I mean initialization of a variable
at the time of declaration is not available in Data Queue, where as it is
available in Data Areas.
Commands
related to Data Queues:-
CRTDTAQ
DLTDTAQ
CRTDTAQ <F4>
Data
Queue Name: - Sun
Library:
Praveen
Length:
- 300
Note:
- To send value to Data Queue, we invoke QSNDDTAQ program, & to receive
value from data Queue we invoke inbuilt program QRCVDTAQ.
SENDING PROGRAM
PGM
DCL
VAR (&A) TYPE (*DEC) LEN (4 0) VALUE (100)
/*
&a variable contains No. of bytes of data to be sent to data queue */
DCL
VAR (&B) TYPE (*CHAR) LEN (300)
/*
&b variable contains actual data that is to be sent to data queue */
CHGVAR
VAR (&B) VALUE (‘WELCOME TO AS/400’)
CALL
PGM (QSNDDTAQ) PARM (SUN PRAVEEN &A
&B)
|
|
ENDPGM
Note:
- Now Data Queue SUN in Library Praveen will
contain value ‘WELCOME
TO AS/400’)
RECEIVING PROGRAM
PGM
DCL
VAR (&S) TYPE (*DEC) LEN (4 0)
DCL
VAR (&D) TYPE (*CHAR) LEN (300)
DCL
VAR (&WAIT) TYPE (*DEC) LEN (5 0) VALUE (1)
CALL
PGM (QRCVDTAQ) PARM (SUN PRAVEEN &S
&D &WAIT)
|
|
SNDPGMMSG
MSG (&D)
ENDPGM
PROGRAM TO DISPLAY USERNAME LOGINTIME SYSTEMNAME
PGM
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
DCL VAR(&JOB) TYPE(*CHAR) LEN(10)
DCL VAR(&SYS) TYPE(*CHAR) LEN(8)
RTVJOBA JOB(&JOB)
USER(&USER)
RTVNETA SYSNAME(&SYS)
SNDPGMMSG ('HAI' *BCAT &USER
*BCAT 'SIGNED ON AT ' *BCAT +
&JOB *BCAT
'ON' *BCAT &SYS)
END: RETURN
ENDPGM
RETRIEVING RECORDS FROM A DATA BASE FILE (EMP)
PGM
DCLF FILE ( PRAVEEN/EMP) RCDFMT ( EMPREC)
DCL
VAR (&TENO) TYPE (*CHAR ) LEN (4)
DCL
VAR (&TNAME) TYPE (*CHAR) LEN (10)
PRA1: RCVF DEV (*FILE) RCDFMT
(EMPREC)
MONMSG MSGID(
CPF0000) EXEC (GOTO CMDLBL (ERROR) )
CHGVAR
VAR ( &TENO ) VALUE (&ENO)
CHGVAR
VAR(&TNAME) VALUE (&ENAME)
SNDPGMMSG MSG
(‘EMPLOYEE NO: ‘ *CAT &TENO *CAT ‘EMPLOYEE NAME:’ *CAT
&TENAME)
GOTO
CMDLBL(PRA1)
ERROR:
SNDPGMMSG MSG( ‘END OF FILE ENCOUNTERED’)
ENDPGM
COMMANDS TO DISPLAY SYSTEM NAME, USER NAME & SYSTEM VALUES ARE
AS FOLLOWS
Command
|
Usage
|
RTVJOBA
|
TO
DISPLAY USER NAME, SYSTEM DATE,user
|
RTVNETA
|
TO
DISPLAY SYSTEM NAME
|
RTVSYSVAL
|
TO
DISPLAY SYSTEM VALUES
|
PROGRAM TO GREET AN EXECUTED USER
PGM
DCL
VAR (&USER) TYPE (*CHAR) LEN (10)
DCL
VAR (&DATE) TYPE (*CHAR) LEN (6)
RTVJOBA USER (&USER) DATE (&DATE)
SNDPGMMSG
MSG (‘AS/400 welcomes’ *cat &user *cat ‘on’ *cat %sst ( &date 3 2 )
*cat
‘ – ‘ *cat
%sst (&date 1 2) *cat ‘ – ‘ *cat %sst ( &date 5 2) )
ENDPGM
CL PROGRAM TO RETRIEVE SYSTEM VALUES
PGM
DCL
VAR ( &QTIME ) TYPE ( *CHAR ) LEN (8)
RTVSYSVAL SYSVAL (QTIME) RTNVAR (&QTIME)
SNDPGMMSG
MSG (&QTIME)
ENDPGM
FACTORIAL OF A NUMBER
PGM
DCL VAR(&N) TYPE(*DEC) LEN(7)
VALUE(9)
DCL VAR(&I) TYPE(*DEC) LEN(7)
VALUE(1)
DCL VAR(&I1) TYPE(*CHAR) LEN(7)
A:
IF COND(&N *GT 0)
THEN(DO)
CHGVAR VAR(&I) VALUE(&I * &N)
CHGVAR VAR(&N) VALUE(&N - 1)
GOTO CMDLBL(A)
ENDDO
CHGVAR VAR(&I1)
VALUE(&I)
SNDPGMMSG MSG(&I1)
ENDPGM
PROGRAMS ON DMPCLPGM COMMAND;
SEE OUTPUT IN QPPGMDMP SPOOL FILE
PGM
DCL VAR(&CHAR10) TYPE(*CHAR) LEN(10)
VALUE(HISTORY)
DCL VAR(&CHAR24) TYPE(*CHAR) LEN(24)
VALUE(MISSIPI)
DCL VAR(&DEC50) TYPE(*DEC) LEN(5 0)
VALUE(198)
DCL VAR(&DEC72) TYPE(*DEC) LEN(7 2)
VALUE(3.14)
DCL VAR(&LGL1) TYPE(*LGL)
VALUE('0')
DMPCLPGM
CHGVAR VAR(&CHAR10) VALUE('MY LIBRARY')
CHGVAR VAR(&CHAR24) VALUE(THISIS24CHARS)
DMPCLPGM
RETURN
ENDPGM
PGM
DCL VAR(&CHAR05) TYPE(*CHAR)
LEN(5)
DCL VAR(&CHAR10) TYPE(*CHAR)
LEN(10)
DCL VAR(&DEC50) TYPE(*DEC) LEN(5
0)
DCL VAR(&DEC72) TYPE(*DEC) LEN(7
2)
CHGVAR VAR(&CHAR05) VALUE('12345')
CHGVAR VAR(&CHAR10) VALUE('12345.67')
CHGVAR VAR(&DEC50) VALUE(&CHAR05)
CHGVAR VAR(&DEC72) VALUE(&CHAR10)
DMPCLPGM
CHGVAR VAR(&DEC50) VALUE(54321)
CHGVAR VAR(&DEC72) VALUE(76543.21)
CHGVAR
VAR(&CHAR05) VALUE(&DEC50)
CHGVAR VAR(&CHAR10) VALUE(&DEC72)
DMPCLPGM
RETURN
ENDPGM
GOTO
COMMAND PROGRAMS
PGM
DCL VAR(&COMPANY) TYPE(*CHAR) LEN(4)
VALUE(ABCO)
IF COND(&COMPANY *EQ ACME) THEN(GOTO
CMDLBL(ACME))
IF COND(&COMPANY *EQ ABCO) THEN(GOTO
CMDLBL(ABCO))
IF COND(&COMPANY *NE ABCO *AND
&COMPANY *NE +
ACME) THEN(SNDUSRMSG
MSG('UNKOWN COMPANY'))
GOTO (ENDOFPGM)
ACME: SNDUSRMSG ('COMPANY NAME IS
ACME')
GOTO ENDOFPGM
ABCO: SNDUSRMSG ('COMPANY NAME IS
ABCO')
GOTO ENDOFPGM
ENDOFPGM:RETURN
ENDPGM
PGM
DCL VAR(&COMPANY) TYPE(*CHAR) LEN(4)
VALUE(ACME)
IF COND(&COMPANY *EQ ACME)
THEN(DO)
SNDPGMMSG ('COMPANY
NAME IS ACME')
GOTO (ENDOFPGM)
ENDDO
IF COND(&COMPANY *EQ ABCO)
THEN(DO)
SNDPGMMSG ('COMPANY
NAME IS ABCO')
GOTO CMDLBL(ENDOFPGM)
ENDDO
IF COND(&COMPANY *NE ACBO *AND
&COMPANY *NE +
ACME) THEN(DO)
SNDPGMMSG ('COMPANY
NAME UNKNOWN')
GOTO CMDLBL(ENDOFPGM)
ENDDO
ENDOFPGM:RETURN
PGM
DCL VAR(&COMPANY) TYPE(*CHAR) LEN(4)
VALUE(ABCO)
DCL VAR(&GOODONE) TYPE(*CHAR)
LEN(1)
IF COND(&COMPANY *EQ ACME)
THEN(DO)
CHGVAR VAR(&GOODONE) VALUE(Y)
SNDPGMMSG ('COMPANY
NAME IS ACME')
GOTO (ENDOFPGM)
ENDDO
ELSE
IF COND(&COMPANY *EQ ABCO)
THEN(DO)
CHGVAR VAR(&GOODONE) VALUE(Y)
SNDPGMMSG ('COMPANY
NAME IS ABCO')
GOTO CMDLBL(ENDOFPGM)
ENDDO
ELSE DO
CHGVAR VAR(&GOODONE) VALUE(N)
SNDPGMMSG ('COMPANY
NAME UNKNOWN')
GOTO CMDLBL(ENDOFPGM)
ENDDO
ENDOFPGM: IF COND(&GOODONE *EQ 'Y')
THEN(SNDPGMMSG +
MSG('THIS IS GOOD
ONE'))
ELSE CMD(SNDPGMMSG MSG('THIS IS
BADONE'))
RETURN
ENDPGM
DMPCLPGM COMMAND PROGRAM CALL
THE CL PROGRAM WATCH QPPGMDMP
PGM
DCL VAR(&NUM1) TYPE(*DEC) LEN(3 0)
VALUE(1)
DCL VAR(&NUM2) TYPE(*DEC) LEN(3 0)
VALUE(2)
DCL VAR(&NUM3) TYPE(*DEC) LEN(3 0)
VALUE(3)
DCL VAR(&NUM4) TYPE(*DEC) LEN(3 0)
VALUE(4)
DCL VAR(&RST1) TYPE(*DEC) LEN(15 5)
VALUE(0
DCL VAR(&RST2) TYPE(*DEC) LEN(15 5)
VALUE(0
DCL VAR(&RST3) TYPE(*DEC) LEN(15 5)
VALUE(0
DCL
VAR(&RST4) TYPE(*DEC) LEN(15 5) VALUE(0
CHGVAR VAR(&RST1) VALUE(2 + 1)
CHGVAR VAR(&RST2) VALUE(1 - 2)
CHGVAR VAR(&RST3) VALUE(1 * 2)
CHGVAR VAR(&RST4) VALUE(1 / 2)
DMPCLPGM
CHGVAR VAR(&RST1) VALUE(&NUM1 +
&NUM2)
CHGVAR VAR(&RST2) VALUE(&NUM1 -
&NUM2)
CHGVAR VAR(&RST2) VALUE(&NUM1 -
&NUM2)
CHGVAR
VAR(&RST3) VALUE(&NUM1 * &NUM2)
CHGVAR
VAR(&RST4) VALUE(&NUM1 / &NUM2)
DMPCLPGM
CHGVAR
VAR(&RST1) VALUE(&NUM1 * -&NUM2)
CHGVAR
VAR(&RST2) VALUE(&NUM1 / -&NUM2)
CHGVAR
VAR(&RST3) VALUE(-&NUM1 * &NUM2)
CHGVAR
VAR(&RST4) VALUE(-&NUM1 / &NUM2)
DMPCLPGM
CHGVAR VAR(&RST1)
VALUE(&NUM2 / &NUM3 + &NUM1)
CHGVAR VAR(&RST2)
VALUE((&NUM2 * 2 ) / &NUM4)
CHGVAR VAR(&RST3)
VALUE((&NUM1 + &NUM2) * &NUM4)
CHGVAR VAR(&RST4)
VALUE((&NUM2 / 2) - &NUM4)
DMPCLPGM
ENDPGM
USING DO LOOP PROGRAM MESSAGES
WILL APPEAR IN JOB LOG
PGM
DCL VAR(&COUNTER) TYPE(*DEC) LEN(1)
VALUE(0)
DCL VAR(&TCOUNT) TYPE(*CHAR) LEN(1)
VALUE('0')
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
RTVJOBA USER(&USER)
LOOP: IF (&COUNTER = 3) THEN(GOTO END)
ELSE
CHGVAR (&COUNTER)
(&COUNTER + 1)
CHGVAR (&TCOUNT)
(&COUNTER)
SNDMSG MSG('THIS IS LOOP ' *CAT &TCOUNT)
+
TOUSR(&USER)
GOTO (LOOP)
END: ENDPGM
PROGRAM ON STRING FUNCTIONS AND
ALSO VARIOUS RETRIEVE COMMANDS
PGM
DCL VAR(&TIME) TYPE(*CHAR) LEN(8)
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
RTVJOBA USER(&USER)
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME)
CHGVAR VAR(&TIME)
VALUE((%SST(&TIME 1 2)) *CAT ':' *CAT +
(%SST(&TIME 3 2)) *CAT ':' *CAT +
(%SST(&TIME 5 2)))
SNDPGMMSG MSG('HI ' *CAT &USER *CAT 'THE TIME IS '
+
*CAT &TIME)
END:
ENDPGM
PGM
DCL VAR(&TIME) TYPE(*CHAR) LEN(8)
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
DCL VAR(&HOURS) TYPE(*DEC) LEN(2)
RTVJOBA USER(&USER)
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME)
CHGVAR (&HOURS)
(%SST(&TIME 1 2))
CHGVAR VAR(&TIME)
VALUE((%SST(&TIME 1 2)) *CAT ':' *CAT +
(%SST(&TIME 3 2)) *CAT ':' *CAT
+
(%SST(&TIME 5 2)))
IF (&HOURS *GE 0 *AND
&HOURS *LT 12) +
(SNDPGMMSG MSG('HI GOOD MORNING'
*CAT &USER *CAT 'THE TIME IS ' +
*CAT
&TIME))
ELSE IF (&HOURS *GE 12 *AND
&HOURS *LT 17) +
(SNDPGMMSG MSG('HI GOOD
AFTERNOON' *CAT &USER *CAT 'THE TIME IS ' +
*CAT &TIME))
ELSE IF (&HOURS *GE 17 *AND &HOURS *LT
20) +
(SNDPGMMSG MSG('HI GOOD EVENING'
*CAT &USER *CAT 'THE TIME IS ' +
*CAT &TIME))
END:
ENDPGM
PROGRAM PARAMETRES
EXAMPLES
COMMANDLINE
PARMS
PGM PARM(&CHAR3)
DCL VAR(&CHAR3) TYPE(*CHAR) LEN(3)
DCL VAR(&TEXT) TYPE(*CHAR) LEN(11)
VALUE('THE +
PARMIS')
SNDPGMMSG (&TEXT *CAT
&CHAR3)
ENDPGM
PGM PARM(&LIB)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DSPLIB LIB(&LIB)
ENDPGM
PGM PARM(&LIB)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&JTP) TYPE(*CHAR) LEN(1)
RTVJOBA TYPE(&JTP)
IF (&JTP = '1') DO
SBMJOB CMD(CALL PGM(SA1105HSH)
PARM(&LIB))
SNDPGMMSG ('JOBSUBMITTED TO
BATCH')
RETURN
ENDDO
DSPLIB LIB(&LIB)
ENDPGM
PGM PARM(&FILE)
DCL (&FILE) TYPE(*CHAR)
LEN(10)
CHKOBJ OBJ(HASHEEM/&FILE) OBJTYPE(*PGM)
SNDPGMMSG ('PROGRAM ENDED
NORMALLY')
RETURN
ENDPGM
PGM PARM(&FILE)
DCL (&FILE) TYPE(*CHAR)
LEN(10)
CHKOBJ OBJ(HASHEEM/&FILE) OBJTYPE(*PGM)
MONMSG MSGID(CPF9801) EXEC(DO)
SNDPGMMSG MSG('CANT FIND +
FILE' *BCAT
&FILE)
RETURN
ENDDO
SNDPGMMSG ('PROGRAM ENDED
NORMALLY')
RETURN
ENDPGM
PGM PARM(&LIB &FILE)
DCL (&FILE) TYPE(*CHAR)
LEN(10)
DCL (&LIB) TYPE(*CHAR)
LEN(10)
DCL (&MSG) TYPE(*CHAR)
LEN(50)
MONMSG MSGID(CPF0000) EXEC(GOTO
CMDLBL(ERROR))
DSPFD FILE(&LIB/&FILE)
DSPLIB LIB(&LIB)
GOTO (ENDIT)
ERROR: RCVMSG MSGTYPE(*LAST) MSG(&MSG)
SNDPGMMSG (&MSG)
ENDIT:
RETURN
ENDPGM
CALLING PROGRAM’S
PGM
DCL &NAME *CHAR 20
+
VALUE('JOHN J.SMITH')
DCL &ADRESS *CHAR VALUE('123 MAINSTREET APARTMENT 45')
DCL &COMENT *CHAR 55 VALUE('LONG TIME CUSTOMER')
DCL &CREDLIMIT *DEC (11 2) VALUE(5000)
DCL &ACTIVE *LGL VALUE('1')
DMPCLPGM
CALL PGMB PARM(&NAME &ADRESS &COMENT 'PHILADEPHIA'
&CREDLIMIT +
55400.10 &ACTIVE)
DMPCLPGM
SNDPGMMSG ('PROCESING COMPLETE') MSGTYPE(*COMP)
RETURN
ENDPGM
PGM
DCL &NAME *CHAR 20
+
VALUE('JOHN J.SMITH')
DCL &ADRESS *CHAR VALUE('123 MAINSTREET APARTMENT 45')
DCL &COMENT *CHAR 55 VALUE('LONG TIME CUSTOMER')
DCL &CREDLIMIT *DEC (11 2) VALUE(5000)
DCL &ACTIVE *LGL VALUE('1')
DMPCLPGM
CALL PGMB PARM(&NAME &ADRESS &COMENT 'PHILADEPHIA'
&CREDLIMIT +
55400.10
&ACTIVE)
DMPCLPGM
SNDPGMMSG ('PROCESING COMPLETE') MSGTYPE(*COMP)
RETURN
ENDPGM
PGMB
PGM PARM(&NAME &ADRESS
&COMENT &CITY &CREDLIMIT +
&HIGHBAL
&ACTIVE)
DCL &NAME *CHAR 20
DCL &ADRESS *CHAR 35
DCL &CITY *CHAR 21
DCL &COMENT *CHAR 55
DCL &CREDLIMIT *DEC (11
2)
DCL &HIGHBAL *DEC (15 5)
DCL &ACTIVE *LGL
CHGVAR (&NAME) VALUE('JERRY
JAMES')
CHGVAR (&ADRESS) VALUE('124
ALDERSON')
CHGVAR (&CITY) VALUE('NEWYORK')
CHGVAR (&COMENT)
VALUE(BLANK)
CHGVAR (&CREDLIMIT)
VALUE(1000.50)
CHGVAR (&HIGHBAL)
VALUE(67100)
CHGVAR (&ACTIVE) VALUE('0')
DMPCLPGM
RETURN
ENDPGM
CALLING
PROGRAM
PGM (&TEXT1)
DCL &TEXT1 *CHAR LEN(6)
DCL &MESSAGE *CHAR LEN(100)
CALL
SA1303HSH (&TEXT1 &MESSAGE)
SNDPGMMSG (&MESSAGE)
RETURN
ENDPGM
CALLED
ROGRAM
PGM (&DATE &MSG)
DCL
&DATE *CHAR LEN(6)
DCL
&MSG *CHAR LEN(100)
DCL
&TEMP1 *CHAR 2
DCL
&TEMP2 *CHAR 9
CHGVAR (&TEMP1) (%SST(&DATE 1 2))
IF
(&TEMP1 *GE '01' *AND &TEMP1 *LE '12') (DO)
IF (&TEMP1 = '01') (CHGVAR (&TEMP2) ('JANAUARY'))
IF (&TEMP1 = '02') (CHGVAR (&TEMP2) ('FEBRAURY'))
IF (&TEMP1 = '03') (CHGVAR (&TEMP2) ('MARCH'))
IF (&TEMP1 = '04') (CHGVAR (&TEMP2) ('APRIL'))
IF (&TEMP1 = '05') (CHGVAR (&TEMP2) ('MAY'))
IF (&TEMP1 = '06') (CHGVAR (&TEMP2) ('JUNE'))
IF (&TEMP1 = '07') (CHGVAR (&TEMP2) ('JULY'))
IF
(&TEMP1 = '08') (CHGVAR (&TEMP2) ('AUGUST'))
IF (&TEMP1 = '09') (CHGVAR (&TEMP2) ('SEPTEMBER'))
IF (&TEMP1 = '10') (CHGVAR (&TEMP2) ('OCTOBER'))
IF
(&TEMP1 = '11') (CHGVAR (&TEMP2) ('NOVEMBER'))
IF
(&TEMP1 = '12') (CHGVAR (&TEMP2) ('DECEMBER'))
ENDDO
ELSE (DO)
CHGVAR (&MSG) ('INVALID DATE')
GOTO (END)
ENDDO
CHGVAR (&MSG) (&TEMP2 *BCAT (%SST(&DATE 3 2)) *BCAT '19'
*CAT +
(%SST(&DATE
5 2)))
END:RETURN
ENDPGM
DIFFERENCE BETWEEN TWO DATES INTHE SAMEYEAR PROGRAM
PGM (&DATE1 &DATE2)
DCL VAR(&DATE1) TYPE(*CHAR) LEN(6)
DCL VAR(&DATE2) TYPE(*CHAR) LEN(6)
DCL VAR(&TEMP1) TYPE(*DEC) LEN(3 0)
DCL VAR(&TEMP2) TYPE(*DEC) LEN(3 0)
DCL VAR(&TEMP3) TYPE(*DEC) LEN(3 0)
DCL VAR(&TEMP4) TYPE(*CHAR) LEN(3)
/*
MONMSG (CPF0000) EXEC(GOTO (ERROR)) */
CVTDAT DATE(&DATE1) TOVAR(&DATE1)
FROMFMT(*MDY) +
TOFMT(*JUL)
CVTDAT DATE(&DATE2) TOVAR(&DATE2)
FROMFMT(*MDY) +
TOFMT(*JUL)
CHGVAR VAR(&TEMP1) VALUE((%SST(&DATE1 4
3)))
CHGVAR VAR(&TEMP2) VALUE((%SST(&DATE2 4
3)))
CHGVAR VAR(&TEMP3) VALUE(&TEMP1 -
&TEMP2)
CHGVAR VAR(&TEMP4) VALUE(&TEMP3)
SNDPGMMSG ('DIFFERENCE BETWEEN TWO DATES IS ' *BCAT &TEMP4)
GOTO (END)
ERROR:
SNDPGMMSG ('INVALID DATES ')
END:
RETURN
ENDPGM
PROGRAM TO DISPLAY USERNAME LOGINTIME SYSTEMNAME
PGM
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
DCL VAR(&JOB) TYPE(*CHAR) LEN(10)
DCL VAR(&SYS) TYPE(*CHAR) LEN(8)
RTVJOBA JOB(&JOB) USER(&USER)
RTVNETA SYSNAME(&SYS)
SNDPGMMSG ('HAI' *BCAT &USER
*BCAT 'SIGNED ON AT ' *BCAT +
&JOB *BCAT
'ON' *BCAT &SYS)
END: RETURN
ENDPGM
SIMPLE MENU
PROGRAM
PGM
DCLF FILE(HASHEEM/SA1503HSH)
SNDRCVF
READ:
IF COND(&IN03 = '1')
THEN(GOTO CMDLBL(END))
IF (&OPT = 1) THEN(DSPJOB)
ELSE IF (&OPT = 2) THEN(WRKSPLF)
ELSE IF (&OPT = 3) THEN(WRKSBMJOB)
ELSE (DO)
CHGVAR (&OPT) (0)
SNDRCVF
GOTO (READ)
ENDDO
END:
ENDPGM
A*%%TS SD 20050217
054046 HASHIM REL-V3R7M0 5716-PW1
A*%%EC
A
DSPSIZ(24 80 *DS3)
A R RCDFMT1
A*%%TS SD 20050217
054046 HASHIM REL-V3R7M0 5716-PW1
A
CA03(03)
A
CA09(09)
A
5 17'PROGRAMER MENU'
A
DSPATR(HI)
A COLOR(RED)
A
7 14'1.DISPLAY JOB'
A
9 14'2.WORKWITHSPOOLEDFILE'
A
11 14'3.WORKWITHSUBMITTEDJOBS'
A 14 14'OPTION:'
A OPT 1S 0B 14 23
PROGRAM TO FIND TOTAL SIZE OF LIBRARY
PGM
DCL
(&LIB) (*CHAR) LEN(10)
DCL
(&TOTSIZ) (*DEC) LEN(15 0)
DCL
(&TOTSIZ1) (*CHAR) LEN(25)
DCL
(&USR) (*CHAR) LEN(10)
DCLF QSYS/QADSPOBJ
RTVDTAARA DTAARA(*LDA (1 10)) RTNVAR(&LIB)
DSPOBJD OBJ(&LIB/*ALL) +
OBJTYPE(*ALL) +
OUTPUT(*OUTFILE) OUTFILE(QTEMP/QADSPOBJ)
OVRDBF FILE(QADSPOBJ) TOFILE(QTEMP/QADSPOBJ)
READ: RCVF
MONMSG (CPF0864) EXEC(GOTO (END))
CHGVAR (&TOTSIZ)
(&TOTSIZ+&ODOBSZ)
GOTO (READ)
END: CHGVAR (&TOTSIZ1) (&TOTSIZ)
DLTF FILE(QTEMP/QADSPOBJ)
SNDPGMMSG ('TOTALSIZE OF THE LIB
' *BCAT &LIB *BCAT +
'IS' *BCAT &TOTSIZ1 *BCAT
'BYTES')
RETURN
ENDPGM
PROGRAMS ON MESSAGE QUEUES
PGM
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(END))
SNDPGMMSG MSG('THIS IS MESAGE 1') TOPGMQ(*EXT) +
MSGTYPE(*INFO)
SNDPGMMSG MSG('THIS IS MESAGE 2') TOPGMQ(*EXT) +
MSGTYPE(*INFO)
SNDPGMMSG MSG('THIS IS MESAGE 3') TOPGMQ(*EXT) +
MSGTYPE(*INFO)
SNDPGMMSG MSG('THIS IS MESAGE 4') TOPGMQ(*EXT) +
MSGTYPE(*INFO)
SNDPGMMSG MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
MSGDTA('job
ended') TOPGMQ(*SAME) +
MSGTYPE(*ESCAPE)
END:
ENDPGM
PGM
SNDPGMMSG MSG('THIS IS MESAGE 1') TOPGMQ(*EXT) +
MSGTYPE(*INFO)
SNDPGMMSG MSG('THIS IS MESAGE 2') TOPGMQ(*EXT) +
MSGTYPE(*INFO)
SNDPGMMSG MSG('THIS IS MESAGE 3') TOPGMQ(*EXT) +
MSGTYPE(*INFO)
SNDPGMMSG MSG('THIS IS MESAGE 4') TOPGMQ(*EXT) +
MSGTYPE(*INFO)
SNDPGMMSG MSG('job ended NORMALLY') TOPGMQ(*SAME)
+
MSGTYPE(*COMP)
WRKMSGQ MSGQ(SA1602HSH)
ENDPGM
INORDER TO RETRIEVE PARTICULAR TYPE OF OBJECTS FROM
LIBRARY
PGM (&LIB)
DCL
(&LIB) (*CHAR) LEN(10)
DCL
(&TYPE) (*CHAR) LEN(5)
DCLF QSYS/QADSPOBJ
DSPOBJD OBJ(&LIB/*ALL) OBJTYPE(*ALL) +
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/QADSPOBJ)
MONMSG
(CPF0000)
OVRDBF FILE(QADSPOBJ) TOFILE(QTEMP/QADSPOBJ)
+
SHARE(*YES)
CHGVAR VAR(&TYPE) VALUE(*FILE)
OPNQRYF FILE((QADSPOBJ)) QRYSLT('&odobtp =
&TYPE') +
OPNID(SAM)
CPYFRMQRYF FROMOPNID(SAM)
TOFILE(QTEMP/SELOBJ) +
MBROPT(*REPLACE)
CRTFILE(*YES) FMTOPT(*NOCHK)
DSPPFM FILE(QTEMP/SELOBJ)
DLTOVR (QADSPOBJ)
CLOF (SAM)
DLTF (QTEMP/QADSPOBJ)
DLTF (QTEMP/SELOBJ)
RETURN
ENDPGM
CHANGE THE LENGTH OF THE &DATE TO 4 AND WATCH THE
OUTPUT
/*BEGINING OF THE PROGRAM*/
PGM /*PROGRAM LINKAGE SECTION*/
/*DECLARATION SECTION*/
DCL VAR(&DATE) TYPE(*CHAR) LEN(6)
DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
DCL VAR(&MSGDTA) TYPE(*CHAR)
LEN(100)
DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGFLIB) TYPE(*CHAR)
LEN(10)
DCL VAR(&ERRORSW) TYPE(*LGL)
/*PROCEDURESECTION */
MONMSG MSGID(CPF0000) EXEC(GOTO
CMDLBL(ERROR))
RTVSYSVAL SYSVAL(QDATE) RTNVAR(&DATE)
SNDPGMMSG MSG('THECURRENT DATE IS :' *CAT
&DATE)
RETURN
/*ERROR PROCEDUR*/
ERROR:
IF COND(&ERRORSW)
THEN(SNDPGMMSG +
MSGID(CPF9999) MSGF(CPFMSG) MSGTYPE(*ESCAPE))
CHGVAR VAR(&ERRORSW) VALUE('1')
ERROR2:
RCVMSG MSGTYPE(*DIAG)
MSGDTA(&MSGDTA) +
MSGID(&MSGID) MSGF(&MSGF)
SNDMSGFLIB(&MSGFLIB)
IF (&MSGID *EQ ' ')
GOTO ERROR3
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA)
MSGTYPE(*DIAG)
GOTO
ERROR2
ERROR3:
RCVMSG MSGTYPE(*EXCP)
MSGDTA(&MSGDTA) MSGID(&MSGID) +
MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
SNDPGMMSG MSGTYPE(*ESCAPE) MSGDTA(&MSGDTA) MSGID(&MSGID) +
MSGF(&MSGFLIB/&MSGF)
ENDPGM
..
BIGGESTNO OF 3 VALUES
PGM
DCLF FILE(HASHEEM/DSP2) RCDFMT(RCDBIG)
A: SNDRCVF RCDFMT(RCDBIG)
IF COND(&IN03 *EQ '0') THEN(DO)
IF COND(&V1 *GT &V2)
THEN(DO)
CHGVAR VAR(&R) VALUE(&V1)
SNDRCVF RCDFMT(RCDBIG)
GOTO CMDLBL(BIG)
ENDDO
CHGVAR VAR(&R) VALUE(&V2)
SNDRCVF RCDFMT(RCDBIG)
ENDDO
BIG: IF COND(&R *GT &V3) THEN(DO)
GOTO CMDLBL(CLOSE)
ENDDO
CHGVAR VAR(&R) VALUE(&V3)
SNDRCVF RCDFMT(RCDBIG)
CLOSE: IF COND(&IN05 *EQ '1') THEN(DO)
CHGVAR VAR(&V1) VALUE(0)
CHGVAR VAR(&V2) VALUE(0)
CHGVAR VAR(&V3) VALUE(0)
CHGVAR VAR(&R) VALUE(0)
SNDRCVF RCDFMT(RCDBIG)
GOTO CMDLBL(A)
ENDDO
A*%%TS
SD 20041227 103334
HASHIM REL-V3R7M0 5716-PW1
A*%%EC
A DSPSIZ(24
80 *DS3)
A
R RCDBIG
A*%%TS
SD 20041227 103334
HASHIM REL-V3R7M0 5716-PW1
A
CA03(03)
A
CA05(05)
A 3 24'BIGGEST
OF THREE NUMBERS'
A 6 10'ENTER VALUE
1:'
A 8 10'ENTER
VALUE 2:'
A 10 10'ENTER
VALUE 3:'
A 13 40'RESUL :
'
A
V1 6Y 2B 6 26EDTWRD(' .
')
A
V2 6Y 2B 8 26EDTWRD(' .
')
A
V3 6Y 2B 10
26EDTWRD(' . ')
A
R 6Y 2B 13
49EDTWRD(' . ')
BIGGEST NO OF 4 VALUES
PGM
DCLF FILE(HASHEEM/DISP3) RCDFMT(RCDDSP4)
DCL VAR(&T) TYPE(*DEC) LEN(8)
DCL VAR(&T1) TYPE(*DEC) LEN(8)
A:
SNDRCVF RCDFMT(RCDDSP4)
IF COND(&IN03 *EQ '0') THEN(DO)
IF COND(&V1 *GT &V2)
THEN(DO)
CHGVAR VAR(&T) VALUE(&V1)
SNDRCVF RCDFMT(RCDDSP4)
GOTO CMDLBL(BIG1)
ENDDO
CHGVAR VAR(&T) VALUE(&V2)
SNDRCVF RCDFMT(RCDDSP4)
GOTO CMDLBL(BIG1)
BIG1:
IF COND(&V3 *GT
&V4) THEN(DO)
CHGVAR VAR(&T1) VALUE(&V3)
CHGVAR VAR(&T1) VALUE(&V3)
SNDRCVF RCDFMT(RCDDSP4)
GOTO CMDLBL(BIG)
ENDDO
CHGVAR VAR(&T1) VALUE(&V4)
SNDRCVF RCDFMT(RCDDSP4)
GOTO CMDLBL(BIG)
BIG: IF COND(&T1 *GT &T) THEN(DO)
CHGVAR VAR(&R) VALUE(&T1)
SNDRCVF RCDFMT(RCDDSP4)
GOTO CMDLBL(CLOSE)
ENDDO
ELSE
CHGVAR VAR(&R) VALUE(&T)
SNDRCVF RCDFMT(RCDDSP4)
GOTO CMDLBL(CLOSE)
CLOSE:
IF COND(&IN05 *EQ '1') THEN(DO)
CHGVAR VAR(&V1) VALUE(0)
CHGVAR VAR(&V2) VALUE(0)
CHGVAR VAR(&V3)
VALUE(0)
CHGVAR VAR(&V4)
VALUE(0)
CHGVAR VAR(&R)
VALUE(0)
SNDRCVF RCDFMT(RCDDSP4)
GOTO CMDLBL(A)
ENDDO
ENDDO
ENDPGM
A*%%TS SD 20041228
044920 HASHIM REL-V3R7M0 5716-PW1
A*%%EC
A
DSPSIZ(24 80 *DS3)
A R RCDDSP4
A*%%TS SD 20041228
044920 HASHIM REL-V3R7M0 5716-PW1
A
CA03(03)
A CA05(05)
A
2 28'BIGEST OF FOUR VALUE '
A
5 10'ENTE VALUE 1 : '
A
7 10'ENTER VALUE 2 :'
A
9 10'ENTER VALUE 3 :'
A
11 9'ENTER VALUE 4 :'
A
16 41'RESULT :'
A V1 6
0B 5 27
A V2 6
0B 7 28
A V3 6
0B 9 29
A V4 6
0B 11 29
A R 6
0B 16 51
LDA 1024
GDA 512
PIP 2000
32bytes
*char
15 5 *dec default 0
1A
LGL default 1
CHGDTAARA <data area>
No comments:
Post a Comment