Anda di halaman 1dari 5

Main Procedure:(Program name is MAIN)---Option 15 to create Module

dprocb1 pr
da 2p 0
db 2p 0
dc 3p 0
dprocb2 pr
da 2p 0
db 2p 0
dc 3p 0
c dsply a 20
c dsply b 20
c z-add 0 c 30
c z-add 0 d 30
c callp procb1(a:b:c)
c c dsply
c callp procb2(a:b:d)
c d dsply
c seton lr

Sub Procedure1(Program name is ADD)--Option 15 to create Module


hnomain
dprocb1 pr
da 2p 0
db 2p 0
dc 3p 0
pprocb1 b export
dprocb1 pi
da1 2p 0
db1 2p 0
dc1 3p 0
c a1 add b1 c1
pprocb1 E

Sub Procedure2(Program name is SUB)--Option 15 to create Module


hnomain
dprocb2 pr
da1 2p 0
db1 2p 0
dc1 3p 0
pprocb2 b export
dprocb2 pi
da1 2p 0
db1 2p 0
dc1 3p 0
c a1 sub b1 c1
pprocb2 e
To Create a Program:
CRTPGM PGM(PGM1) MODULE(MAIN ADD SUB)

Binding Directory:(Collection of Modules or Service Programs)


All the subprocedures(Example ADD,SUB)I am going to bind with one name(example Binding1)
so hereafter while creating Program I am going to bind all the modules,Just I am going to use this
Binding1(Binding Directory name).

To Create a Binding Directory:

CRTBNDDIR BNDDIR(BINDING1)

To Add modules in this Binding Directory:


1.ADDBNDDIRE BNDDIR(BINDING1) OBJ((ADD *MODULE))
2.ADDBNDDIRE BNDDIR(BINDING1) OBJ((SUB *MODULE))

similarly u can add many modules to this Binding Birectory.

How to use this Binding Directory in Program:

CRTPGM PGM(PGM1) MODULE(MAIN) BNDDIR(BINDING1)

Service Program:(Collection of Modules)


In Normal Binding the Module and in use of Binding Directory,there is a problem if u change the
module...
Example:If u change the module means the programs which all using this module is also wants to
change....
It is very difficult to find whatall Programs using this module and update it using UPDPGM.
So in order to avoid this Service Programs is Created. Its also Not executable and it can be used in
CRTPGM and Binding Directory.

To Create Service Program:

CRTSRVPGM SRVPGM(SRVPGM1) MODULE(ADD SUB) EXPORT(*ALL)


Explanation:
EXPORT(*ALL)---is important becauz it automatically create one signature.
Based on this signature only the Program will fetch the Procedures(from ADD and SUB Module)
SIGNATURE------while creating service program itself it will create signature(Hexadecimal value
created based on procedures)Here u binded 2 modules(means 2 procedures)so based on these 2
procedures siganture will be created.If u r using 3 or many procedures means based on these
procedures signature will be created.
Example of signature is 0000000000000000000F0EEE00437647.
To see the signature:

DSPSRVPGM SRVPGM(SRVPGM1)

To update Service Program:


If any modules updated means U can update ur service Program using UPDSRVPGM.

How to use this service program in your Program:

CRTPGM PGM(PGM1) MODULE(MAIN) BNDSRVPGM(SRVPGM1)

So finally Our main aim to create a Main Procedures (Based on our requirements)and use the service
Program whenever its necessary.

Drawbacks in Using EXPORT(*ALL)While Creating Service Program:-


Consider Service Program is Created Using EXPORT(*ALL)with 3 procedures(Procedure name and
Module Name can be same) and its Binded in CRTPGM as PGM1,PGM2.....So many Programs is
using this Service Program...If I change the service program with one more Procedures(4
Procedures)means Then all the Programs(example may be 100 Pgms) have to be changed becauz its
referenced by old service program with old signature but not based on one more added Procedure new
signatureis created so for the same service Program 2 signature is created. So signature violation Error
will Occur.
In Order to avoid this Binder Language is Used.
In This Binder Language for Old 3 Procedures One Signature is created and for added 4 Procedures
One signature is Created. So whenever Service Program is Updated with additional Module we have to
modify only Binder Language as follows..
STRPGMEXP ------------Default Current Signature
EXPORT SYMBOL(PROCB1)
EXPORT SYMBOL(PROCB2)
EXPORT SYMBOL(PROCB3)
endpgmexp
STRPGMEXP PGMLVL(*PRV) ----Old Signature For Older Service program(means Signature will
be there based on theses 2 Procedures)
EXPORT SYMBOL(PROCB1)
EXPORT SYMBOL(PROCB2)
endpgmexp

ACTIVATION GROUP:
Is a memory allocation for the execution of job.It holds system Resources,variables,files open etc
All ILE Programs will run only in Activation Group.
While creating Program using F10,U can see the activation group.
3 types of Action Group:
1.*NEW
2.*CALLER
3.Named Activation Group(Default QILE is the named Activation Group)
Here is an simple example How the variables are reused if we use Activation Group:

*NEW
HDFTACTGRP(*NO) ACTGRP(*new)
dcounter s 10p 0 export
c eval counter=counter + 1
c counter dsply
c seton lr

Compile this Program using 14---becaus in H spec u specified Activation group.


Then call it The output is 1 Then call now the output is 1 and Then also 1 and goes on .....becauz each
time while execution its taking in new activation Group.

Named Activation Group:.


HDFTACTGRP(*NO) ACTGRP('JAGADESH')
dcounter s 10p 0 export
c eval counter=counter + 1
c counter dsply
c seton lr

Compile this Program using 14---becaus in H spec u specified Activation group.


Then call it The output is 1 Then call now the output is 2 and Then 3 and goes on .....becauz each time
while execution its taking in same activation Group (JAGADESH).

To clear the Activation group:


RCLACTGRP ACTGRP(JAGADESH)
or
SIGNOFF

*CALLER
Mostly this Activation Group can be used only for calling Program so that whatever called Program
uses Activation group....The calling program can also use the same activation Group.
The Advantage of using this is both can run in one activation group and varibales Reused,Open files
reuse etc.

COPYBOOK(Type is RPGLE,TXT or anytype)But if u use RPGLE means Its easier to expand)


some Important code,variable declaration,exfmt,Repeated code can be used in copybook.
It will expand at the time of compilation.
The main aim of copybook is to avoid writing repeated code in ur program.
Example:(name of the copybook is jaga)
C Z-ADD 5 A 20
C Z-ADD 6 B 20
C Z-ADD 0 C 20

Program:
C/COPY JAGADESH1/QUINNOX,JAGA
C EVAL C=A+B
C C DSPLY
C SETON LR

Here in this program I havent declared any variables...I used only copybook...Its expanded at the time
of compilation.

FREE-FORM SYNTAX:
Here no need of Factor1,Factor2,result etc As u like u can code..
and semicolon is mandatory...
Example:
fJaga if e disk USROPN
c
c/FREE
open jaga;
read jaga;
dsply eno;
/END-FREE ---------------------this is very important it should start from 8th line as /END-FREE
c* read jaga 55
c SETON LR

Anda mungkin juga menyukai