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