The PSDS keyword for a free-form definition or the S letter, which appears in the 23rd position in a fixed format RPG, is used to identify it. It offers information on program exceptions and errors that the program can access.
To ensure that each module can only have a single PSDS, it must be defined in the main source section. Predefined subfields are present in a PSDS.
Declaring PSDS in Fixed format RPG program:
* Program status data structure
* program exception available to rpg program (1 psds per module)
D psds1 SDS
D proc_name *proc * module/program
* 1 to 10 position, 10 chars
D pgm_status *status * status code
* 11 to 15 position, (5,0) zoned decimal
D pgm_prvstatus 16 20S 0 * Prev. status
D src_listing 21 28 * src. list line
D routine *routine * routine
* 29 to 36 position, 8 chars
* *INIT --> program initialization
* *DETL --> detail lines
* *GETIN --> get input record
* *TOTC --> Total calculations
* *TOTL --> Total lines
* *DETC --> Detail calculations
* *OFL --> Overflow lines
* *TERM --> Program ending
* *ROUTINE --> name of program or procedure called (first 8 chars)
D parms *parms * no. of parms pass
* 37 to 39 position, (3,0) zoned decimal
D excptype 40 42 * exception type
* CPF --> operating system exception
* MCH --> machine exception
D excpnum 43 46 * exception number
* CPF --> CPF message number
* MCH --> MCH message number
D reserved1 47 50 * reserved
D workarea 51 80 * internal use by
* ILE RPG compiler
D pgmlib 81 90 * prgram library
D excpdata 91 170 * exception data
D excpcause 171 174 * exception that
* cause RNX9001
D filename 175 184 * file name on whic
*h last file operati
*on occur updated on
*ly when error occur
D unused 185 190 * unused
D date 191 198 * date(*date format)
D yy 199 200S 0 * first two digits
* of 4 digit year
D filenametrn 201 208 * file name truncate
* (175-184 pos above
D statusinfo 209 243 * status info on las
*t file used
D jobname 244 253 * job name
D username 254 263 * user name
D jobnumber 264 269 * job number
D date2 270 275S 0 * date (udate format
* pgm running
* (191-198 pos above
D pgmrundate 276 281S 0 * date of pgm runnin
D time 282 287S 0 * time (hhmmss)
* pgm running
D date3 288 293 * date (udate format
* pgm compiled
D time2 294 299 * time (hhmmss)
* pgm compiled
D cmplevel 300 303 * compiler level
D srcfile 304 313 * src file name
D srclib 314 323 * src lib name
D srcmbr 324 333 * src file member
D pgmproc 334 343 * pgm containing
* procedure
D modproc 344 353 * module containing
* procedure
D srcid 354 355B 0 * src id match the
* binary 2 (5i,0)
* statement number
* from pos 21-28
D srcid2 356 357B 0 * src id match the
* binary 2 (5i,0)
* statement number
* from pos 228-235
D curuserprf 358 367 * current user profi
D exterrorcd 368 371I 0 * external error cod
* Integer (10,0)
D elements 372 379I 0 * elements set by XM
* Integer (20,0)
*L-INTO or DATA-INTO
D internaljobid 380 395 * internal job id
D systemname 396 403 * system name
D unused2 404 429
We can declare program status data structure in rpgle free format as follows:
**FREE
// Program status data structure
// program exception which is available to rpg program // (1 psds per module is asllowd))
dcl-ds psdsname psds;
proc_name *proc; //name of the module or program position 1 to 10 (10 chars)
pgm_status *status; //status code position 11 to 15 (5,0) zoned decimal
pgm_previousstatus zoned(5);// Previous status
source_listing char(8); // source list line
routineName *routine; // routine name position 29 to 36, (8 chars)
// *INIT --> program initialization &
// *DETL --> detail lines &
// *GETIN --> get the input record
// *TOTC --> Total calculations
// *TOTL --> Total lines
// *DETC --> Detail calculations
// *OFL --> Overflow lines
// *TERM --> Program ending
// *ROUTINE --> name of program or procedure called (first 8 chars)
params *parms; // no. of parms pass position 37 to 39, (3,0) zoned decimal
exceptionType char(3); // exception type
// CPF --> operating system exception
// MCH --> machine exception
exceptionNumber char(4);//exception number
// CPF --> CPF message number
// MCH --> MCH message number
reserved1 char(4);// reserved
workarea char(30); // internal use by ILE RPG compiler
programlibrary char(10); // prgram library
exceptiondata char(80); // exception data
exceptioncause char(4); //exception that cause RNX9001
filecname char(10); // file name on whicc last file
// operation occur updated only when error occur
unused char(6); //unused
date char(8); //date(*date format)
yy zoned(2); //first two digits of 4 digit year
filenametruncate char(8); // file name truncate 175-184 pos above
statusinfo char(35); // status info on last file used
jobname char(10); // job name
username char(10); // user name
jobnumber zoned(6); //job number
date2 zoned(6); // date (udate format pgm running (191-198 pos above
programrundate zoned(6); // date of pgm running
time zoned(6); // time (hhmmss) pgm running
date3 char(6); // date (udate format pgm compiled
time2 char(6); // time (hhmmss) pgm compiled
compilerlevel char(4); // compiler level
sourcefile char(10); // src file name
sourcelibrary char(10); // src lib name
sourcemember char(10); //src file member
programprocedure char(10); // pgm containing procedure
moduleprocedure char(10); // module that contains procedure
sourceid bindec(2); // source id that match the statement number from pos 21-28
sourceid2 bindec(2); // src id that match the statement number from pos 228-235 binary 2 (5i,0)
currentuserprofile char(10); // this is current user profile
externalerrorcode int(10); // this is external error code Integer (10,0)
elements int(20); //his is elements set by XML-INTO or DATA-INTO Integer (20,0)
internaljobid char(16); //this is internal job id
systemName char(8); // this is system name
unused2 char(6); // this is unused field
end-ds;
The PSDS keyword for a free-form definition or the S letter, which appears in the 23rd position in a fixed format RPG, is used to identify it. It offers information on program exceptions and errors that the program can access.
To ensure that each module can only have a single PSDS, it must be defined in the main source section. Predefined subfields are present in a PSDS.
Declaring PSDS in Fixed format RPG program:
We can declare program status data structure in rpgle free format as follows: