Program Status Data Structure in RPG AS400 |
Introduction to Program Status Data Structure
It is identified by the PSDS keyword for a free form definition or S specified in 23 positions in fixed format RPG. It provides program exception/error information available to the program.
The PSDS must be defined in the main source section so that there are only one PSDS available per module. A PSDS contains predefined subfields.
Using PSDS in RPGLE Fixed, /Free and Fully Free format
RPG Code in Fixed format for program status data structure in RPG AS400
* 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 * unused C SETON LR
RPG Code in /Free format for program status data structure in RPG AS400
* 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 * unused /Free *INLR = *ON; /End-Free
RPG Code in Fully Free format for program status data structure in RPG AS400
**FREE //Program status data structure //program exception available to rpg program (1 psds per module) dcl-ds psds1 psds; proc_name *proc; // module/program // 1 to 10 position, 10 chars pgm_status *status; // status code // 11 to 15 position, (5,0) zoned decimal pgm_prvstatus zoned(5);// Prev. status src_listing char(8); // src. list line 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) parms *parms; // no. of parms pass // 37 to 39 position, (3,0) zoned decimal excptype char(3); // exception type // CPF --> operating system exception // MCH --> machine exception excpnum 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 pgmlib char(10); // prgram library excpdata char(80); // exception data excpcause char(4); //exception that cause RNX9001 filcname 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 filenametrn 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 pgmrundate 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 cmplevel char(4); // compiler level srcfile char(10); // src file name srclib char(10); // src lib name srcmbr char(10); //src file member pgmproc char(10); // pgm containing procedure modproc char(10); // module containing procedure srcid bindec(2); // src id match the statement number from pos 21-28 srcid2 bindec(2); // src id match the statement number from pos 228-235 // binary 2 (5i,0) curuserprf char(10); // current user profi exterrorcd int(10); // external error cod // Integer (10,0) elements int(20); //elements set by XML-INTO or DATA-INTO // Integer (20,0) internaljobid char(16); //internal job id systemname char(8); // system name unused2 char(6); //unused end-ds; *INLR = *ON;
compile the RPG source code using option 14 or CRTBNDRPG command.
PSDS data in debug
Evaluate Expression Previous debug expressions > EVAL psds1 PROC_NAME OF PSDS1 = 'RPGLE7 ' PGM_STATUS OF PSDS1 = 00000. PGM_PRVSTATUS OF PSDS1 = 00000. SRC_LISTING OF PSDS1 = '00000000' ROUTINE OF PSDS1 = '*DETC ' PARMS OF PSDS1 = 000. EXCPTYPE OF PSDS1 = . EXCPNUM OF PSDS1 = ' ' RESERVED1 OF PSDS1 = '0000' WORKAREA OF PSDS1 = ' ' PGMLIB OF PSDS1 = 'EASYCLASS1' EXCPDATA OF PSDS1 = ....5...10...15...20...25...30...35...40...45...50...55...60 1 ' ' 61 ' ' EXCPCAUSE OF PSDS1 = ' ' FILENAME OF PSDS1 = ' ' UNUSED OF PSDS1 = ' ' DATE OF PSDS1 = '12162021' YY OF PSDS1 = 20. FILENAMETRN OF PSDS1 = ' ' STATUSINFO OF PSDS1 = ' ' JOBNAME OF PSDS1 = 'QPAD185722' USERNAME OF PSDS1 = 'EASYCLASS ' JOBNUMBER OF PSDS1 = '284920' DATE2 OF PSDS1 = 121621. PGMRUNDATE OF PSDS1 = 121621. TIME OF PSDS1 = 204908. DATE3 OF PSDS1 = '122320' TIME2 OF PSDS1 = '191945' CMPLEVEL OF PSDS1 = '0001' SRCFILE OF PSDS1 = 'RPGLE ' SRCLIB OF PSDS1 = 'EASYCLASS1' SRCMBR OF PSDS1 = 'RPGLE7 ' PGMPROC OF PSDS1 = 'RPGLE7 ' MODPROC OF PSDS1 = 'RPGLE7 ' SRCID OF PSDS1 = 6448. SRCID2 OF PSDS1 = 6448. CURUSERPRF OF PSDS1 = 'EASYCLASS ' EXTERRORCD OF PSDS1 = 0 ELEMENTS OF PSDS1 = 0 INTERNALJOBID OF PSDS1 = ' █ █ █ xÀ%██v██' SYSTEMNAME OF PSDS1 = 'PUB400 ' UNUSED2 OF PSDS1 = ' '
Using PSDS with *PSSR to catch program exception in RPGLE
We will do exceptional handling in RPGLE using PSDS and PSSR subroutine.
Related Post
Read also :
- Data Structure and Types of DS in RPG AS400
- Using a Data Structure to subdivide the field in RPG AS400
- Using a Data Structure to group fields in RPG AS400
- Externally Described Data Structure in RPG AS400
- Using EXTFLD to code Externally Described DS in RPG AS400
- Using PREFIX to rename all fields in an external data structure in RPG AS400
- Define an externally-described data structure using the LIKEREC keyword in RPG AS400
- Difference between LIKEREC and EXTNAME keyword in RPG AS400
- Multiple Occurrence Data Structure in RPG AS400
- Data Area Data Structure in RPG AS400
- *LDA Local data area data structure in RPG AS400
- File information data structures (INFDS) in RPG AS400
- Indicator data structure in RPG AS400
- Using keywords QUALIFIED, LIKEDS, and DIM with data structures
- Array Data Structures in RPG AS400
- Defining Data Structure Parameters in a Prototype or Procedure Interface