/*------------------------------------------------------------------*/
/*    Programmers Group & Management Resource    Copyright  1997    */
/*                                                                  */
/*                             \\\\\\\                              */
/*                            ( o   o )                             */
/*------------------------oOO----(_)----OOo-------------------------*/
/*                                                                  */
/*  System name  . . . :   PGMR Tool                                */
/*  Program name . . . :   UPDRPG1                                  */
/*  Text . . . . . . . :   CPP for UPDRPGSRC                        */
/*                                                                  */
/*  Author . . . . . . :   Alexander Nubla                          */
/*  Creation date. . . :   11/25/97                                 */
/*  Description. . . . :   This program builds the temporary file   */
/*                         used by the source expansion program.    */
/*                                                                  */
/*                                                                  */
/*                     ooooO              Ooooo                     */
/*                     (    )             (    )                    */
/*----------------------(   )-------------(   )---------------------*/
/*                       (_)               (_)                      */
/*                                                                  */
/*  Modification Log:                                               */
/*                                                                  */
/*  Date     Task  Programmer/Description                           */
/*  -------- ----- ------------------------------------------------ */
/*  11/25/97       Alex Nubla                                       */
/*                 Created                                          */
/*                                                                  */
/*------------------------------------------------------------------*/
             pgm        (&FullSrc      /* Source file & Library */   +
                         &SrcMbr       /* Source Member         */   +
                         &SrcSeq       /* Source Seq Option     */   +
                         &IncSeq)      /* Increment Seq Number  */

/*--------------------------------------------------------*/
/*  declaration                                           */
/*--------------------------------------------------------*/
             dcl        &FullSrc   *char   20
             dcl        &SrcMbr    *char   10
             dcl        &SrcSeq    *char    7
             dcl        &IncSeq    *dec   ( 3 2)

             dcl        &Src       *char   10
             dcl        &SrcLib    *char   10
             dcl        &MbrPos    *char   10
             dcl        &SrcTyp    *char   10
             dcl        &SrcTxt    *char   50
             dcl        &Lib       *char   10
             dcl        &JobTyp    *char    1
             dcl        &AllMbr    *lgl        value('0')

             dcl        &error     *lgl                   /* std err */
             dcl        &msgid     *char    7             /* std err */
             dcl        &msgkey    *char    4             /* std err */
             dcl        &msgdta    *char  100             /* std err */
             dcl        &msgf      *char   10             /* std err */
             dcl        &msgflib   *char   10             /* std err */
             dcl        &msgtyp    *char   10  '*DIAG'    /* std err */
             dcl        &msgtypctr *char    4 X'00000001' /* std err */
             dcl        &pgmmsgq   *char   10  '*'        /* std err */
             dcl        &stkctr    *char    4 X'00000001' /* std err */
             dcl        &errbytes  *char    4 X'00000000' /* std err */

             monmsg     msgid(cpf0000) exec(goto error)

/*--------------------------------------------------------*/
/*  If *ALL is requested for the member, submit this      */
/*  job to batch.                                         */
/*--------------------------------------------------------*/
             if         (&SrcMbr *ne '*ALL')     then(goto Start)
             chgvar     &AllMbr    '1'

             rtvjoba    type(&jobtyp)
             if         (&jobtyp *eq '1')   do
               sbmjob     job(&SrcMbr)           +
                            cmd(call UPDRPG1     +
                              parm(&FullSrc      +
                                   &SrcMbr       +
                                   &SrcSeq       +
                                   &IncSeq))     +
                            jobd(*usrprf)        +
                            jobq(*jobd)          +
                            user(*current)       +
                            inllibl(*current)
               rcvmsg     msgtype(*last)         +
                            msgdta(&msgdta)      +
                            msgid(&msgid)        +
                            msgf(&msgf)          +
                            msgflib(&msgflib)
               sndpgmmsg  msgid(&msgid)          +
                            msgf(&msgflib/&msgf) +
                            msgdta(&msgdta)
               return
             enddo

 Start:
             chgvar     &Src       %sst(&FullSrc   1  10)
             chgvar     &SrcLib    %sst(&FullSrc  11  10)
/*--------------------------------------------------------*/
/*  Add the tool library in the *LIBL                     */
/*--------------------------------------------------------*/
             rtvobjd    obj(*libl/UPDRPGSRC) +
                        objtype(*cmd)       +
                        rtnlib(&lib)
             addlible   &lib
             monmsg     cpf0000
/*--------------------------------------------------------*/
/*  If member is not *ALL, bypass read of all members     */
/*--------------------------------------------------------*/
             if         (&SrcMbr =  '*ALL')      then(goto GetFirst)
             rtvmbrd    file(&SrcLib/&Src)  +
                        mbr(&SrcMbr)        +
                        srctype(&SrcTyp)    +
                        text(&SrcTxt)
             Goto       Override

/*--------------------------------------------------------*/
/*  If *ALL member requested, get the first member.       */
/*--------------------------------------------------------*/
 GetFirst:
             rtvmbrd    file(&SrcLib/&Src)  +
                        mbr(*FIRSTMBR)      +
                        rtnmbr(&SrcMbr)     +
                        srctype(&SrcTyp)    +
                        text(&SrcTxt)
             monmsg     cpf3049             exec(goto End)

             chgvar     &MbrPos    &SrcMbr
             if         (&SrcTyp *ne 'SQLRPGLE'  *and +
                         &SrcTyp *ne 'RPGLE')    then(goto Read)
             Goto       Override
          /*----------------------------------------------*/
          /*  Read next member, position on the Current   */
          /*----------------------------------------------*/
 Read:
             rtvmbrd    file(&SrcLib/&Src)  +
                        mbr(&MbrPos *NEXT)  +
                        rtnmbr(&SrcMbr)     +
                        srctype(&SrcTyp)    +
                        text(&SrcTxt)
             monmsg     cpf3049             exec(goto End)

             chgvar     &MbrPos    &SrcMbr
             if         (&SrcTyp *ne 'SQLRPGLE'  *and +
                         &SrcTyp *ne 'RPGLE')    then(goto Read)
          /*----------------------------------------------*/
          /*  Use QDDSSRC to override the file for input  */
          /*----------------------------------------------*/
 Override:
             ovrdbf     file(QDDSSRC)            +
                        tofile(&SrcLib/&Src)     +
                        mbr(&SrcMbr)

          /*----------------------------------------------*/
          /*  Use QRPGLESRC to override the output file   */
          /*----------------------------------------------*/
             dltf       qtemp/qrpglesrc
             monmsg     cpf0000
             cpyf       fromfile(&SrcLib/&Src)   +
                        tofile(qtemp/qrpglesrc)  +
                        frommbr(*first)          +
                        tombr(*first)            +
                        mbropt(*none)            +
                        crtfile(*yes)
             rmvm       file(qtemp/qrpglesrc)    +
                        mbr(*all)
             monmsg     cpf0000

             addpfm     file(qtemp/qrpglesrc)    +
                        mbr(&SrcMbr)             +
                        text(&SrcTxt)            +
                        srctype(&SrcTyp)
             ovrdbf     file(qrpglesrc)          +
                        tofile(qtemp/qrpglesrc)  +
                        mbr(&SrcMbr)
             callprc    'UPDRPG2'

          /*----------------------------------------------*/
          /*  Resequence the expanded member              */
          /*----------------------------------------------*/
             if         (&SrcSeq = '*UPDATE')  ( +
               callprc    'UPDRPG3'  parm(&incseq) )
             else       (callprc    'UPDRPG4'  parm(&incseq) )

          /*----------------------------------------------*/
          /*  Move new member to the original member      */
          /*----------------------------------------------*/
             movm       fromfile(qtemp/qrpglesrc) +
                        tofile(&SrcLib/&Src)     +
                        frommbr(&SrcMbr)         +
                        replace(*yes)

             if         &AllMbr    goto Read
             Goto       End

/*--------------------------------------------------------*/
/*  error routine:                                        */
/*--------------------------------------------------------*/
 error:
             if         &error     (goto errordone)
               else      chgvar       &error  '1'
          /*----------------------------------------------*/
          /*  move all *DIAG message to *PRV program queue*/
          /*----------------------------------------------*/
             call       QMHMOVPM   (&msgkey      +
                                    &msgtyp      +
                                    &msgtypctr   +
                                    &pgmmsgq     +
                                    &stkctr      +
                                    &errbytes)
          /*----------------------------------------------*/
          /*  resend the last *ESCAPE message             */
          /*----------------------------------------------*/
 errordone:
             call       QMHRSNEM   (&msgkey      +
                                    &errbytes)
             monmsg     cpf0000    exec(do)
               sndpgmmsg  msgid(cpf3cf2) msgf(QCFPMSG) +
                            msgdta('QMHRSNEM') msgtype(*escape)
               monmsg     cpf0000
             enddo
 end:        endpgm
