DSN8MPV
THIS MODULE BUILDS A PROJECT STRUCTURE, COMPOSED OF A SELECTED PROJECT AND ITS SUBPROJECTS.
DSN8MPV: /* DETAIL - PROJECT STRUCTURE */00010000
PROC REORDER; 00020000
%SKIP(2);00030000
/********************************************************************* 00040000
* * 00050000
* MODULE NAME = DSN8MPV * 00060000
* * 00070000
* DESCRIPTIVE NAME = DB2 SAMPLE APPLICATION * 00080000
* PROJECT STRUCTURE - DETAIL MODULE * 00090000
* PL/I * 00100000
* * 00110000
* COPYRIGHT = 5740-XYR (C) COPYRIGHT IBM CORP 1982, 1989 * 00120000
* REFER TO COPYRIGHT INSTRUCTIONS FORM NUMBER G120-2083 * 00130000
* * 00140000
* STATUS = VERSION 2 RELEASE 2, LEVEL 0 * 00150000
* * 00160000
* FUNCTION = THIS MODULE BUILDS A PROJECT STRUCTURE, COMPOSED * 00170000
* OF A SELECTED PROJECT AND ITS SUBPROJECTS. * 00180000
* FOR EACH PROJECT, THE RESPONSIBLE EMPLOYEE IS SHOWN. * 00190000
* * 00200000
* THE SELECTED PROJECT CAN BE SPECIFIED * 00210000
* IN SEVERAL WAYS: * 00220000
* THROUGH A 'NEW' REQUEST * 00230000
* . IT CAN BE SPECIFIED IN SECONDARY SELECTION * 00240000
* . IT CAN BE THE ONLY IN SECONDARY SELECTION * 00250000
* THROUGH A 'SCROLL' REQUEST * 00260000
* . IT CAN BE THE SAME AS LAST TIME * 00270000
* ('NEXT' FUNCTION) * 00280000
* . IT CAN BE THE SUPERORDINATE PROJECT * 00290000
* OF THE LAST ONE ('LEFT' FUNCTION) * 00300000
* * 00310000
* NOTES = * 00320000
* DEPENDENCIES = * 00330000
* * 00340000
* RESTRICTIONS = THE VALID OPTIONS ARE: * 00350000
* P - D - PS - DI,DN,EI,EN,PI,PN,RI,RN * 00360000
* * 00370000
* MODULE TYPE = * 00380000
* PROCESSOR = DB2 PRECOMPILER, PL/I OPTIMIZER * 00390000
* MODULE SIZE = SEE LINK-EDIT * 00400000
* ATTRIBUTES = REUSABLE * 00410000
* * 00420000
* ENTRY POINT = DSN8MPV * 00430000
* PURPOSE = SEE FUNCTION * 00440000
* LINKAGE = MODULE CALLED BY DSN8MPM * 00450000
* * 00460000
* INPUT = PARAMETERS EXPLICITLY PASSED TO THIS FUNCTION: * 00470000
* COMMON AREA. * 00480000
* * 00490000
* SYMBOLIC LABEL/NAME = OUTAREA .OUTPUT * 00500000
* DESCRIPTION = SECONDARY SELECTION OUTPUT * 00510000
* OR 'LAST TIME' DETAIL OUTPUT * 00520000
* * 00530000
* SYMBOLIC LABEL/NAME = DSN8MP_POS.MPVSAVE * 00540000
* DESCRIPTION = SAVED DATA FROM 'LAST TIME' * 00550000
* * 00560000
* SYMBOLIC LABEL/NAME = INAREA * 00570000
* DESCRIPTION = USER INPUT * 00580000
* * 00590000
* SYMBOLIC LABEL/NAME = PCONVSTA.MAXSEL * 00600000
* DESCRIPTION = NUMBER OF SELECTIONS * 00610000
* * 00620000
* SYMBOLIC LABEL/NAME = COMPARM .NEWREQ * 00630000
* DESCRIPTION = Y-NEW REQUEST * 00640000
* N-OLD REQUEST * 00650000
* * 00660000
* OUTPUT = PARAMETERS EXPLICITLY RETURNED: * 00670000
* COMMON AREA. * 00680000
* * 00690000
* SYMBOLIC LABEL/NAME = OUTAREA .OUTPUT * 00700000
* DESCRIPTION = SCREEN DETAIL OUTPUT * 00710000
* * 00720000
* SYMBOLIC LABEL/NAME = PCONVSTA.PREV * 00730000
* DESCRIPTION = 'D' * 00740000
* * 00750000
* EXIT-NORMAL = * 00760000
* * 00770000
* * 00780000
* EXIT-ERROR = * 00790000
* * 00800000
* RETURN CODE = NONE * 00810000
* * 00820000
* ABEND CODES = NONE * 00830000
* * 00840000
* * 00850000
* ERROR-MESSAGES = * 00860000
* DSN8038I 'CURRENT' PROJECT NOT FOUND * 00870000
* DSN8039E NO 'HIGHER' PROJECT EXISTS * 00880000
* DSN8056I NO MORE DATA TO DISPLAY * 00890000
* DSN8066E UNSUPPORTED PFK OR LOGIC ERROR * 00900000
* DSN8070E VITAL DATA IS MISSING IN * 00910000
* TABLE 'TOPTVAL' * 00920000
* DSN8073E SPECIFIED LINE-NUMBER NOT FOUND IN * 00930000
* PREVIOUS SCREEN * 00940000
* * 00950000
* EXTERNAL REFERENCES = * 00960000
* ROUTINES/SERVICES = * 00970000
* DSN8MPG = ERROR MESSAGE ROUTINE * 00980000
* * 00990000
* DATA-AREAS = * 01000000
* DSN8MPPJ = DCLGEN FOR VPROJ - PROJECT TABLE * 01010000
* DSN8MPPD = DCLGEN FOR VPSTRDET - PROJECT STRUCTURE TABLE * 01020000
* DSN8MPMV = DCLGEN FOR VOPTVAL - OPTIONS VALIDATION TABLE * 01030000
* DSN8MPDT = DCLGEN FOR VDSPTXT - DISPLAY AREA TEXT TABLE * 01040000
* * 01050000
* CONTROL-BLOCKS = * 01060000
* SQLCA = SQL COMMUNICATION AREA * 01070000
* DSN8MPCA = SAMPLE APPLICATION COMMUNICATIONS AREA * 01080000
* * 01090000
* DSN8MPDH = CURSOR FOR DISPLAY AREA TEXT * 01100000
* DSN8MPPE = CURSOR FOR PROJECT STRUCTURE * 01110000
* * 01120000
* CHANGE-ACTIVITY = * 01130000
* * 01140000
* * 01150000
* *PSEUDOCODE* * 01160000
* PROCEDURE * 01170000
* MAIN PROCESSING. * 01180000
* SQL-GET TEXTLINES (HEADER, INFO AND PFK) FROM TABLE VOPTVAL * 01190000
* IF NOT FOUND, ERROR('066E') * 01200000
* IF NEW REQUEST THEN * 01210000
* IF MAX SELECTION IS 1 THEN SELECTED-LINE = '01' * 01220000
* ELSE GET SELECTED-LINE FROM INPUT DATA * 01230000
* FIND SELECTED PROJECT IN PREVIOUS SCREEN * 01240000
* IF NOT FOUND, ERROR('073E') * 01250000
* SQL-FETCH DISPLAY AREA HEADER LINES FROM VDSPTXT USING DH * 01260000
* IF NEW REQUEST THEN * 01270000
* CLEAR SAVED SCROLLING LIMITS * 01280000
* CALL BUILD-DISPLAY-ASCENDING * 01290000
* ELSE * 01300000
* FIND SELECTED PROJECT IN PREVIOUS SCREEN * 01310000
* SELECT PFK VALUE * 01320000
* WHEN('08' OR 'NEXT') CALL BUILD-DISPLAY-ASCENDING * 01330000
* WHEN('10' OR 'LEFT') CALL PREPARE-LEFT * 01340000
* OTHERWISE ERROR('056E') * 01350000
* RETURN TO CALLER (OF DSN8MPV) * 01360000
* * 01370000
* ERROR AND MESSAGE HANDLER. * 01380000
* SQL-GET MESSAGE TEXT FROM DSN8MPG FOR GIVEN ARGUMENT * 01390000
* IF NOT FOUND, BUILD MESSAGE TEXT * 01400000
* RETURN TO CALLER (OF DSN8MPV) * 01410000
* * 01420000
* PREPARE-LEFT. * 01430000
* SQL-GET 'HIGHER' PROJECT FOR 'CURRENT' PROJECT * 01440000
* FROM TABLE VPROJ * 01450000
* IF 'CURRENT' NOT FOUND, ERROR('037I') * 01460000
* IF NO 'HIGHER', MESSAGE('038E') * 01470000
* MAKE 'HIGHER' PROJECT 'CURRENT' * 01480000
* RETURN TO CALLER * 01490000
* * 01500000
* * 01510000
* BUILD-DISPLAY-ASCENDING. * 01520000
* SQL-OPEN CURSOR PDA * 01530000
* DO WHILE(MORE DATA AND THERE IS ROOM IN DISPLAY AREA) * 01540000
* SQL-FETCH INTO PPSTRDET USING PDA * 01550000
* IF FIRST TIME * 01560000
* CLEAR DISPLAY AREA (EXCEPT HEADERS) * 01570000
* PUT 'CURRENT' PROJECT AND RESPONSIBLE ON LEFT SIDE * 01580000
* MOVE PROJECT AND RESPONSIBLE DATA TO RIGHT PART OF SCREEN * 01590000
* MOVE CURRENT LINE DOWN 3 LINES * 01600000
* END * 01610000
* IF NO DATA FOUND, MESSAGE('056I') * 01620000
* SAVE LIMIT VALUE FOR NEXT TIME SCROLLING * 01630000
* SQL-CLOSE CURSOR PDA * 01640000
* RETURN TO CALLER * 01650000
* * 01660000
* END. * 01670000
*-------------------------------------------------------------------*/01680000
/********************************************************/ 01690000
/* ** FIELDS SENT TO MESSAGE ROUTINE */ 01700000
/********************************************************/ 01710000
01720000
DCL MODULE CHAR (07) INIT ('DSN8MPV'); 01730000
DCL OUTMSG CHAR (69); 01740000
01750000
%PAGE;01760000
/***************************************************************/ 01770000
/* BUILT-IN FUNCTIONS */ 01780000
/***************************************************************/ 01790000
01800000
DCL 01810000
(ADDR, 01820000
HBOUND, 01830000
HIGH, 01840000
LENGTH, 01850000
LOW, 01860000
SUBSTR) BUILTIN; 01870000
01880000
/***************************************************************/ 01890000
/* PROGRAM VARIABLES */ 01900000
/***************************************************************/ 01910000
01920000
DCL 01930000
TOPLINE FIXED BIN(31), /* TOP LINE ON SCREEN */ 01940000
BOTLINE FIXED BIN(31), /* BOTTOM LINE ON SCREEN */ 01950000
CURRLINE FIXED BIN(31), /* CURRENT LINE ON SCREEN */ 01960000
I FIXED BIN(31), 01970000
CURRLINE_PTR PTR, /* CURRENT LINE POINTER */ 01980000
NEXTLINE_PTR PTR, /* NEXT LINE POINTER */ 01990000
LINE_SELECT_C CHAR(2), 02000000
LINE_SELECT_P PIC'99' DEF LINE_SELECT_C; 02010000
%PAGE;02020000
/***************************************************************/ 02030000
/* FOUR OVERLAYS USED TO PLACE OUTPUT DATA CORRECT ON SCREEN */ 02040000
/***************************************************************/ 02050000
02060000
DCL 02070000
1 LEFT_PROJ BASED(CURRLINE_PTR), /* LEFT PROJECT */ 02080000
3 P1NO CHAR( 6), 02090000
3 X11 CHAR( 2), 02100000
3 P1NA CHAR(24); 02110000
%SKIP(2);02120000
DCL 02130000
1 LEFT_RESP BASED(NEXTLINE_PTR), /* LEFT RESPONSIBLE*/ 02140000
3 X21 CHAR( 1), 02150000
3 R1NO CHAR( 6), 02160000
3 X22 CHAR( 2), 02170000
3 R1NA CHAR(30); 02180000
%SKIP(2);02190000
DCL 02200000
1 RIGHT_PROJ BASED(CURRLINE_PTR), /* RIGHT PROJECT */ 02210000
3 X12 CHAR(40), 02220000
3 P2NO CHAR( 6), 02230000
3 X13 CHAR( 2), 02240000
3 P2NA CHAR(24); 02250000
%SKIP(2);02260000
DCL 02270000
1 RIGHT_RESP BASED(NEXTLINE_PTR), /* RIGHT RESPONSIBLE */ 02280000
3 X23 CHAR(40), 02290000
3 X24 CHAR( 1), 02300000
3 R2NO CHAR( 6), 02310000
3 X25 CHAR( 2), 02320000
3 R2NA CHAR(30); 02330000
%PAGE;02340000
/***************************************************************/ 02350000
/* ** INITIALIZE CONTROL FIELD TO DETAIL HANDLER */ 02360000
/* ** INITIALIZE MODULE TO DSN8MPV */ 02370000
/***************************************************************/ 02380000
02390000
PCONVSTA.PREV = 'D'; /*INITIALIZE CONTROL FIELD*/ 02400000
DSN8_MODULE_NAME.MAJOR = 'DSN8MPV'; /*INITIALIZE MODULE NAME */ 02410000
DSN8_MODULE_NAME.MINOR = ''; /* CLEAR ROUTINE NAME */ 02420000
02430000
/*************************************************************/ 02440000
/* ** RETRIEVE HEADING LINE, PFKEY DESCRIPTION, AND MESSAGE */ 02450000
/*************************************************************/ 02460000
02470000
EXEC SQL SELECT * /* RETRIEVE INFORMATION */ 02480000
INTO :POPTVAL 02490000
FROM VOPTVAL 02500000
WHERE MAJSYS = :INAREA.MAJSYS 02510000
AND ACTION = :INAREA.ACTION 02520000
AND OBJFLD = :INAREA.OBJFLD 02530002
AND SCRTYPE = 'D'; 02540000
%SKIP(2);02550000
IF SQLCODE^=0 THEN 02560000
/* SOME VITAL DATA IS MISSING IN */ 02570000
/* THE PROGRAM RELATED TABLE */ 02580000
/* PRINT ERROR MESSAGE */ 02590000
DO; 02600000
CALL DSN8MPG (MODULE, '070E', OUTMSG); 02610000
CALL ERROR_HANDLER; 02620000
END; 02630000
02640000
/*********************************************************/ 02650000
/* ** PUT DATA IN THE SCREEN */ 02660000
/*********************************************************/ 02670000
02680000
PCONVSTA.LASTSCR = 'DSN8001'; 02690000
PCONVSTA.TITLE = POPTVAL.HEADTXT; /* OBTAIN HEADING */ 02700000
PCONVSTA.MSG = POPTVAL.INFOTXT; /* OBTAIN MESSAGE INFO. */ 02710000
PCONVSTA.PFKTEXT = POPTVAL.PFKTXT; /* OBTAIN PFKEY INFO. */ 02720000
%PAGE;02730000
%PAGE;02740000
/* SET UP INDEX FOR THE BOTTOMLINE*/ 02750000
/* IN THE DISPLAY AREA */ 02760000
02770000
BOTLINE = HBOUND(PCONVSTA.LINE,1); 02780000
02790000
/*********************************************************/ 02800000
/* ** DETERMINE IF NEW REQUEST */ 02810000
/* ** IF SO, PREVIOUS REQUEST WAS SECONDARY SEL */ 02820000
/*********************************************************/ 02830000
02840000
IF COMPARM.NEWREQ='Y' THEN /* NEW REQUEST ? */ 02850000
02860000
DO; 02870000
IF PCONVSTA.MAXSEL=1 THEN 02880000
LINE_SELECT_C = '01'; /* SPECIFIED LINE NO. = '01'*/ 02890000
02900000
ELSE /* ELSE */ 02910000
/* GET SPECIFIED LINE NO. */ 02920000
/* FROM INPUT DATA */ 02930000
DO; 02940000
LINE_SELECT_C = SUBSTR(COMPARM.INAREA.DATA,1,2); 02950000
PCONVSTA.OUTAREA.DATA = ''; 02960000
END; 02970000
%SKIP(2);02980000
DO I=1 TO HBOUND(DSN8MP2_POS.LINENO,1); 02990000
IF LINE_SELECT_P = DSN8MP2_POS(I).LINENO THEN 03000000
LEAVE; 03010000
END; 03020000
%SKIP(2);03030000
IF I>HBOUND(DSN8MP2_POS.LINENO,1) THEN 03040000
03050000
/* THE SPECIFIED LINE NO. WAS NOT */ 03060000
/* FOUND IN THE PREVIOUS SCREEN */ 03070000
DO; /* PRINT ERROR MESSAGE */ 03080000
CALL DSN8MPG (MODULE, '073E', OUTMSG); 03090000
CALL ERROR_HANDLER; 03100000
END; 03110000
%SKIP(2);03120000
/* SAVE SELECTED PROJECT NUMBER */ 03130000
03140000
PPSTRDET.PROJ1NO = DSN8MP2_POS(I).PROJNUM; 03150000
END; 03160000
%PAGE;03170000
/**********************************************************/ 03180000
/* ** USING THE SQL-CURSOR 'DH' */ 03190000
/* ** GET HEATING LINES FOR DISPLAY AREA */ 03200000
/**********************************************************/ 03210000
03220000
EXEC SQL OPEN DH; /* OPEN DH CURSOR */ 03230000
03240000
DO I=1 TO BOTLINE UNTIL(SQLCODE^=0); /* GET HEATING LINES */ 03250000
03260000
EXEC SQL FETCH DH 03270000
INTO :PDSPTXT.DSPLINE, :PDSPTXT.LINENO; 03280000
IF SQLCODE=0 THEN 03290000
PCONVSTA.LINE(I) = PDSPTXT.DSPLINE; 03300000
END; 03310000
EXEC SQL CLOSE DH; /* CLOSE DH CURSOR */ 03320000
03330000
/* TOPLINE IS THE FIRST AVAILABLE */ 03340000
TOPLINE = I; /* LINE IN THE DISPLAY AREA */ 03350000
%PAGE;03360000
IF COMPARM.NEWREQ='Y' THEN 03370000
/* THIS IS A NEW REQUEST, SO MAKE */ 03380000
/* SURE WE DON'T LIMIT OUT SEARCH */ 03390000
DO; 03400000
MPVSAVE.P2MIN = LOW(LENGTH(P2MIN)); 03410000
03420000
CALL BUILD_DISPLAY_ASCENDING; /* BUILD DISPLAY AREA */ 03430000
END; 03440000
ELSE 03450000
/* THIS IS AN ANSWER (SHOULD BE A */ 03460000
/* SCROLL REQUEST) SO WE SAVE THE */ 03470000
/* CURRENT 'LEFT-SIDE' PROJECT */ 03480000
/* FROM THE PREVIOUS SCREEN */ 03490000
DO; 03500000
CURRLINE_PTR = ADDR(PCONVSTA.LINE(TOPLINE)); 03510000
PPSTRDET.PROJ1NO = LEFT_PROJ.P1NO; 03520000
03530000
/* DETERMINE THE SCROLL REQUEST */ 03540000
/* AND CALL CORRESPONDING ROUTINE */ 03550000
SELECT; 03560000
WHEN(COMPARM.PFKIN='08', /*PFKEY 8 OR NEXT*/ 03570000
SUBSTR(COMPARM.DATA,1,4)='NEXT') 03580000
CALL BUILD_DISPLAY_ASCENDING; 03590000
%SKIP(1);03600000
WHEN(COMPARM.PFKIN='10', /*PFKEY 10 OR LEFT*/ 03610000
SUBSTR(COMPARM.DATA,1,4)='LEFT') 03620000
CALL PREPARE_LEFT; 03630000
/* UNSUPPORTED PFK OR LOGIC ERROR*/ 03640000
OTHERWISE /* PRINT ERROR MESSAGE */ 03650000
DO; 03660000
CALL DSN8MPG (MODULE, '066E', OUTMSG); 03670000
CALL ERROR_HANDLER; 03680000
END; 03690000
END; 03700000
END; 03710000
%PAGE;03720000
/*************************************************************/ 03730000
/* ** GET THE 'HIGHER' DEPARTMENT FOR 'CURRENT' DEPARTMENT */ 03740000
/* ** FROM TABLE VDEPT */ 03750000
/*************************************************************/ 03760000
PREPARE_LEFT: 03770000
PROC REORDER; 03780000
DSN8_MODULE_NAME.MINOR = 'PREPLEFT'; /* GET ROUTINE NAME */ 03790000
03800000
EXEC SQL SELECT MAJPROJ /*GET INFO. FROM TABLE*/ 03810000
INTO :PPROJ.MAJPROJ:NULL_IND1 03820000
FROM VPROJ 03830000
WHERE PROJNO=:PPSTRDET.PROJ1NO; 03840000
03850000
/*CURRENT PROJECT NOTFOUND*/ 03860000
IF SQLCODE^=0 THEN /*PRINT ERROR MESSAGE */ 03870000
DO; 03880000
CALL DSN8MPG (MODULE, '038I', OUTMSG); 03890000
CALL ERROR_HANDLER; 03900000
END; 03910000
03920000
IF NULL_IND1 = -1 THEN PPROJ.MAJPROJ = ''; 03925000
IF PPROJ.MAJPROJ^='' THEN /* MAKE HIGHER PROJECT CURRENT*/ 03930000
DO; 03940000
PPSTRDET.PROJ1NO = PPROJ.MAJPROJ; 03950000
MPVSAVE.P2MIN = LOW(LENGTH(P2MIN)); 03960000
CALL BUILD_DISPLAY_ASCENDING; 03970000
END; 03980000
ELSE /*NO HIGHER PROJ EXISTS*/ 03990000
DO; /*PRINT ERROR MESSAGE */ 04000000
04010000
CALL DSN8MPG ( MODULE, '039E', OUTMSG); 04020000
CALL ERROR_HANDLER; 04030000
END; 04040000
END; /* OF PROCEDURE PREPARE_LEFT */ 04050000
%PAGE;04060000
/**********************************************************/ 04070000
/* ** BUILD DISPLAY AREA */ 04080000
/**********************************************************/ 04090000
04100000
BUILD_DISPLAY_ASCENDING: 04110000
PROC REORDER; 04120000
%SKIP(2);04130000
DSN8_MODULE_NAME.MINOR = 'BUILD_A'; /* GET ROUTINE NAME */ 04140000
%SKIP(2);04150000
EXEC SQL OPEN PDA; /* OPEN PDA CURSOR */ 04160000
%SKIP(2);04170000
%SKIP(2);04180000
CURRLINE = TOPLINE; 04190000
/* WE WILL SELECT DATA AS LONG AS */ 04200000
/* THERE IS ROOM IN DISPLAY AREA */ 04210000
DO WHILE( CURRLINE<BOTLINE-1 & SQLCODE=0 ); 04220000
%SKIP(2);04230000
EXEC SQL FETCH PDA 04240000
INTO :PPSTRDET; 04250000
%SKIP(2);04260000
IF SQLCODE=0 THEN 04270000
/* WE HAVE FOUND SOME DATA SO WE */ 04280000
/* ADDRESS CURRENT AND NEXT LINES */ 04290000
DO; 04300000
CURRLINE_PTR = ADDR(PCONVSTA.LINE(CURRLINE)); 04310000
NEXTLINE_PTR = ADDR(PCONVSTA.LINE(CURRLINE+1)); 04320000
%SKIP(2);04330000
/*************************************************************/ 04340000
/* ** THIS ROUTINE IS ONLY PERFORMED THE FIRST TIME AND IT...*/ 04350000
/* ** CLEARS THE DISPLAY AREA */ 04360000
/* ** PUTS LEFT SIDE PROJECT AND RESPONSIBLE IN PLACE */ 04370000
/* ** SAVES DATA FOR FUTURE SCROLLING */ 04380000
/*************************************************************/ 04390000
04400000
IF CURRLINE=TOPLINE THEN 04410000
DO; 04420000
DO I=TOPLINE TO BOTLINE; /*CLEARS DISPLAY AREA*/ 04430000
PCONVSTA.LINE(I) = ''; 04440000
END; 04450000
04460000
/*PUT LEFT SIDE PROJECT */ 04470000
/*& RESPONSIBLE IN PLACE */ 04480000
LEFT_PROJ.P1NO = PPSTRDET.PROJ1NO; 04490000
LEFT_PROJ.P1NA = PPSTRDET.PROJ1NAME; 04500000
LEFT_RESP.R1NO = PPSTRDET.RESP1NO; 04510000
04520000
/*SAVES LIMITED VALUES FOR NEXT */ 04530000
/*TIME SCROLLING */ 04540000
IF PPSTRDET.RESP1MI=' ' THEN 04550000
LEFT_RESP.R1NA = PPSTRDET.RESP1FN||' '|| 04560000
PPSTRDET.RESP1LN; 04570000
ELSE 04580000
LEFT_RESP.R1NA = PPSTRDET.RESP1FN||' '|| 04590000
PPSTRDET.RESP1MI||' '|| 04600000
PPSTRDET.RESP1LN; 04610000
END; 04620000
%SKIP(2);04630000
/*********************************************************/ 04640000
/* ** IF '1'- RIGHT SIDE IS PROJECT */ 04650000
/* ** PUT ITS RESPONSIBLE ON TWO LINES */ 04660000
/* ** MAKE THIRD LINE BLANK */ 04670000
/* NOTE: ONLY FILL IN THE RIGHT SIDE IF THERE IS A*/ 04680000
/* LOWER ITEM. IF THE PROJ1NO = PROJ2NO THEN*/ 04690000
/* THERE IS NO LOWER LEVEL ITEM. */ 04700000
/* */ 04710000
/*********************************************************/ 04720000
04730000
/* RIGHT SIDE IS PROJECT SO PUT */ 04740000
/* IT AND ITS MANAGER ON TWO LINES */ 04750000
/* MAKE THIRD LINE 'BLANK' */ 04760000
04770000
IF PPSTRDET.PROJ1NO ^= PPSTRDET.PROJ2NO THEN 04780000
DO; /* FILL IN RIGHT SIDE*/ 04790000
RIGHT_PROJ.P2NO = PPSTRDET.PROJ2NO; 04800000
RIGHT_PROJ.P2NA = PPSTRDET.PROJ2NAME; 04810000
RIGHT_RESP.R2NO = PPSTRDET.RESP2NO; 04820000
IF PPSTRDET.RESP2MI=' ' THEN 04830000
RIGHT_RESP.R2NA = PPSTRDET.RESP2FN||' '|| 04840000
PPSTRDET.RESP2LN; 04850000
ELSE 04860000
/*************************************************************/ 04870000
/* ** IF '2'- RIGHT SIDE IS RESPONSIBLE EMPLOYEE */ 04880000
/* ** PUT EMPLOYEE ON ONE LINE */ 04890000
/* ** MAKE SECOND LINE BLANK */ 04900000
/*************************************************************/ 04910000
04920000
/* RIGHT SIDE IS RESPONSIBLE PUT */ 04930000
/* HIM/HER ON ONE LINE AND MAKE */ 04940000
/* NEXT LINE 'BLANK' */ 04950000
04960000
RIGHT_RESP.R2NA = PPSTRDET.RESP2FN||' '|| 04970000
PPSTRDET.RESP2MI||' '|| 04980000
PPSTRDET.RESP2LN; 04990000
CURRLINE = CURRLINE+3; 05000000
END; /* FILL IN THE RIGHT SIDE */ 05010000
END; 05020000
END; 05030000
%SKIP(2);05040000
05050000
/****************************************************************/ 05060000
/* ** IF '3'- NO DATA FOUND */ 05070000
/* ** MOVE CURRENT LINE TO BOTTOM LINE (TERMINATE) */ 05080000
/****************************************************************/ 05090000
IF CURRLINE=TOPLINE THEN 05100000
05110000
/* NO DATA FOUND, SO SETUP */ 05120000
/* FOR NEXT TIME SCROLLING */ 05130000
/* GO AND GIVE ERROR-MESSAGE */ 05140000
DO; 05150000
MPVSAVE.P2MIN = HIGH(LENGTH(P2MIN)); 05160000
CALL DSN8MPG (MODULE, '056I', OUTMSG); 05170000
CALL ERROR_HANDLER; 05180000
END; 05190000
%SKIP(2);05200000
IF SQLCODE^=0 THEN 05210000
05220000
/* WE HAVE REACHED END OF SEARCH */ 05230000
/* SAVE FOR NEXT TIME SCROLLING */ 05240000
MPVSAVE.P2MIN = HIGH(LENGTH(P2MIN)); 05250000
%SKIP(2);05260000
ELSE 05270000
05280000
/* LAST DATA FOUND WILL BE SAVED */ 05290000
/* FOR NEXT TIME SCROLLING */ 05300000
MPVSAVE.P2MIN = PPSTRDET.PROJ2NO; 05310000
%SKIP(2);05320000
EXEC SQL CLOSE PDA; /*CLOSE PDA CURSOR */ 05330000
%SKIP(2);05340000
END /* OF PROCEDURE BUILD_DISPLAY_ASCENDING */; 05350000
%PAGE;05360000
/**********************************************************/ 05370000
/* ** GETS ERROR TEXT AND PRINTS ERROR MESSAGES */ 05380000
/**********************************************************/ 05390000
05400000
ERROR_HANDLER: PROC; 05410000
/* GET ERROR TEXT */ 05420000
DSN8_MODULE_NAME.MINOR = 'ERROR_H'; /* GET ROUTINE NAME */ 05430000
05440000
/* PRINT MESSAGE */ 05450000
PCONVSTA.MSG = OUTMSG; 05460000
05470000
GOTO END_OF_DSN8MPV; 05480000
END; /* OF PROCEDURE ERROR_HANDLER */ 05490000
%SKIP(2);05500000
END_OF_DSN8MPV:; 05510000
%SKIP(2);05520000
DSN8_MODULE_NAME.MINOR = 'FINISHED'; /* FINISHED */ 05530000
%SKIP(2);05540000
END DSN8MPV; 05550000