         PROCEDURE  MGRB2158                                                    
                    using &LINK_FILE     as String (08),                        
                          &LINK_RENAME   as String (08),                        
                          &LINK_LIB      as String (08),                        
                          &LINK_VOL      as String (06),                        
                          &LINK_SPACE    as Integer,                            
                          &LINK_DPACK    as String (03),                        
                          &LINK_IPACK    as String (03),                        
                          &LINK_APACK    as String (03),                        
                          &LINK_TYPE     as String (01),                        
                          &LINK_PROG     as String (01),                        
                          &LINK_GROWTH   as String (05),                        
                          &LINK_RPT      as String (08),                        
                          &LINK_PORT     as String (04)                         
                                                                                
                                                                                
          OPTIONS PROCMSG = NO                                                  
                                                                                
          ASSIGN &LINK_TYPE = '2' [ Get aroung COPY Bug ]                       
                                                                                
***********************************************************************         
* PROCEDURE:  MGRB2158                                                *         
* TITLE:      File Reorg utility                                      *         
* REMARKS:    Reorganizes a file, parameters are passed in to         *         
*             determine how to reorg the file                         *         
*                                                                     *         
*   NOTE:     ALL Return Codes MUST be less that 999    <<<<<         *         
*                                                                     *         
*=====================================================================*         
* PARAMETERS Passed in:                                               *         
*                                                                     *         
* &LINK_FILE   -- Name of the File to be Reorganized                  *         
* &LINK_RENAME -- Name of the Temporary file to use when              *         
*                 reorganizing the file.  It is located to Library    *         
*                 TEMPDATA.  Note if equal to spaces it is assigned   *         
*                 to File Name &LINK_FILE                             *         
* &LINK_LIB    -- Library the file is in                              *         
* &LINK_VOL    -- Volume the file is on                               *         
* &LINK_SPACE  -- # of records to ADD to the File,                    *         
*                 used only for COPY                                  *         
* &LINK_DPACK  -- Data Packing Factor                                 *         
*                 Optional, if equal to spaces it is set to 95%       *         
* &LINK_IPACK  -- Index Packing Factor                                *         
*                 Optional, if equal to spaces it is set to 90%       *         
* &LINK_APACK  -- Alternate Index Packing Factor (OVEREASY only)      *         
*                 Optional, if equal to spaces it is set to 80%       *         
* &LINK_TYPE   -- Type of Reorg to to, valid valuse are:              *         
*                 '1' -- One copy reorg.  This method is faster but   *         
*                        Disk Pack &LINK_VOL need to have plenty of   *         
*                        space.  &LINK_FILE is renamed to &LINK_RENAME*         
*                        in Library TEMPDATA.  Then &LINK_RENAME is   *         
*                        copied with reorg to &LINK_FILE.             *         
*                        &LINK_RENAME is then deleted                 *         
*                 '2' -- Two copy reorg.  Will copy &LINK_FILE to     *         
*                        file &LINK_RENAME in TEMPDATA on thw Work    *         
*                        Volume.  &LINK_RENAME is then copied         *         
*                        with reorg to &LINK_FILE.  If the reorg      *         
*                        is successful then &LINK_RENAME is deleted   *         
* &LINK_PROG   -- Utility to use, valid values are:                   *         
*                 'C' -- USE COPY Utility                             *         
*                 'O' -- USE OVEREASY                                 *         
* &LINK_GROWTH -- Growth Rate, for OVEREASY                           *         
*                 Optional, if equal to spaces set = 15%              *         
* &LINK_RPT    -- OVEREASY Report Name                                *         
* &LINK_PORT   -- MESSAGE Port to send a message to                   *         
*                 Optional, if equal to spaces MESSAGE is NOT Sent    *         
*                                                                     *         
*=====================================================================*         
*                                                                     *         
* Version    Date   Who Why                                           *         
* -------- -------- --- --------------------------------------------- *         
* 00.03.00 10/07/93 1. Bypass OVEREASY Return Code of 4               *         
* 00.02.00 10/04/93 1. Changed COPY step to get around a bug          *         
*                      within COPY that releases all space when       *         
*                      REORG = YES on Index Files                     *         
*                   2. Changed COPY step to get around a bug          *         
*                      within COPY that releases all space when       *         
*                      REORG = NO  on Consecutive Files               *         
*                   3. Because of the COPY Bug the &LINK_TYPE         *         
*                      will ALWAYS default to '2'.                    *         
*                   4. Fixed OVEREASY Problems                        *         
* 00.01.00 07/06/93 1. Added logging of Return Codes                  *         
*                   2. Send message when a Return Code occurs         *         
* 00.00.00 06/17/93 JMC Original Version                              *         
*                                                                     *         
***********************************************************************         
                                                                                
          DECLARE &VERSION          as String (08) Initial "00.03.00"           
          DECLARE &PROC             as String (08) Initial "MGRB2158"           
          DECLARE &SPACE_06,                                                    
                  &SYS_VOL          as String (06) Initial " "                  
          DECLARE &CP_R_C,                                                      
                  &R_C,                                                         
                  &BLOCKS           as Integer     Initial 0                    
          DECLARE &WORK_FILE        as String (08) Initial &LINK_RENAME         
          DECLARE &WORK_LIB         as String (08) Initial "TEMPDATA"           
          DECLARE &WORK_VOL         as String (06) Initial " "                  
          DECLARE &USER_ID          as String (03) Initial " "                  
          DECLARE &MG2166_MESSAGE   as String (80) Initial " "                  
          DECLARE &REORG_1          as String (03) Initial " "                  
          DECLARE &REORG_2          as String (03) Initial " "                  
                                                                                
***** Ex: for a 1 second pause init &SECONDS to 100                             
********* DECLARE &SECONDS       as Integer     Initial 18000 [ 3 min ]         
********* DECLARE &PAUSE_COUNT   as Integer     Initial 0                       
********* DECLARE &PAUSE_LIMIT   as Integer     Initial 3                       
          DECLARE &SECONDS       as Integer     Initial 12000 [ 2 min ]         
          DECLARE &PAUSE_COUNT   as Integer     Initial 0                       
          DECLARE &PAUSE_LIMIT   as Integer     Initial 0                       
          DECLARE &PAUSE_MSG     as String (40) Initial " "                     
                                                                                
****** MG2159 Area                                                              
          DECLARE &MG2159_FILE_RECORD_SIZE as Integer     Initial 0             
          DECLARE &MG2159_NUM_RECORDS      as Integer     Initial 0             
          DECLARE &MG2159_BLOCKS_FREE      as Integer     Initial 0             
          DECLARE &MG2159_BLOCKS_USED      as Integer     Initial 0             
          DECLARE &MG2159_BLOCKS_ALLOCATED as Integer     Initial 0             
          DECLARE &MG2159_OWNER            as String (03) Initial " "           
          DECLARE &MG2159_DATE             as String (06) Initial " "           
          DECLARE &MG2159_FILE_CLASS       as String (01) Initial " "           
          DECLARE &MG2159_EXPIRATION_DATE  as String (06) Initial " "           
          DECLARE &MG2159_FILE_TYPE        as String (02) Initial " "           
                                                                                
**** Screen FACs                                                                
          DECLARE &LOPROUL      as String (01) Initial &BYTE(172)               
          DECLARE &FLPRO        as String (01) Initial &BYTE(148)               
          DECLARE &HIPRO        as String (01) Initial &BYTE(132)               
          DECLARE &LOPRO        as String (01) Initial &BYTE(140)               
                                                                                
****** SEND Message Area                                                        
        DECLARE &MSG_SYS_VOL        as String (06) Initial " "                  
        DECLARE &MSG_VSSUB_LIB      as String (08) Initial "VSSUBS  "           
        DECLARE &MSG_RETURN_CODE    as Integer     Initial 0                    
        DECLARE &MSG_XM             as String (02) Initial "XM"                 
        DECLARE &R_C_MESSAGE        as String (75) Initial " "                  
        DECLARE &FILE_MESSAGE       as String (24) Initial " "                  
        DECLARE &MSG_MESSAGE        as String (75) Initial " "                  
        DECLARE &SPACE_75           as String (75) Initial " "                  
        DECLARE &MSG_MESSAGE_SIZE   as Integer     Initial 75                   
        DECLARE &MSG_PORT_NAME      as String (04) Initial &LINK_PORT           
                                                                                
***** Task # Area                                                               
        DECLARE &TASK_NUMBER        as Integer     Initial 0                    
        DECLARE &TASK_LITERAL       as String (75) Initial " "                  
                                                                                
***********************************************************************         
* STEP00 -- Display copy program message                              *         
***********************************************************************         
STEP00:   CALL GETTASK                                                          
          ASSIGN &FILE_MESSAGE = &LINK_VOL(1,*) !! "." !!                       
                                 &LINK_LIB(1,*) !! "." !!                       
                                 &LINK_FILE(1,*)                                
                                                                                
STEP00:   MESSAGE ERASE = NO ROW 23 CENTER                                      
                  "Reorginizing " !! &FILE_MESSAGE(1,*)                         
                                                                                
          IF &LINK_PROG = "O" GOTO STEP00O                                      
                                                                                
STEP00C:  ASSIGN  &LINK_PROG = "C"                                              
          GOTO STEP00z                                                          
                                                                                
STEP00O:  IF &LINK_RPT(1,1) = " " GOTO STEP00P                                  
          IF &LINK_RPT(2,1) = " " GOTO STEP00P                                  
          IF &LINK_RPT(3,1) = " " GOTO STEP00P                                  
          IF &LINK_RPT(4,1) = " " GOTO STEP00P                                  
          IF &LINK_RPT(5,1) = " " GOTO STEP00P                                  
          IF &LINK_RPT(6,1) = " " GOTO STEP00P                                  
          IF &LINK_RPT(7,1) = " " GOTO STEP00P                                  
          GOTO STEP00z                                                          
STEP00P:  ASSIGN &LINK_RPT      = "AAA" !! &TASK_LITERAL !! "XXXXX"             
          ASSIGN &LINK_RPT(8,1) = " "                                           
          GOTO STEP00z                                                          
                                                                                
STEP00z:  [ continue ]                                                          
                                                                                
***********************************************************************         
* STEP01 -- MU5350, Gets file locations                               *         
***********************************************************************         
STEP01:   RUN MU5350                                                            
              CANCEL EXIT is STEP01x                                            
               ENTER CATGET     CATNAME=MG10151S                                
     MG10151S: ENTER LOCATION                                                   
               ENTER CATGET     CATNAME=VSSUBS                                  
       VSSUBS: ENTER LOCATION                                                   
               ENTER CATGET     CATNAME=FPSUPROC                                
     FPSUPROC: ENTER LOCATION                                                   
               ENTER CATGET     CATNAME=FPSULOAD                                
     FPSULOAD: ENTER LOCATION                                                   
               ENTER CATGET     CATNAME=FPSURPTS                                
     FPSURPTS: ENTER LOCATION                                                   
               ENTER CATGET     CATNAME=MG21641C                                
     MG21641C: ENTER LOCATION                                                   
               ENTER CATGET                                                     
                                                                                
          IF STEP01 = 0  GOTO STEP01z                                           
                                                                                
          ASSIGN &R_C         = STEP01                                          
          ASSIGN &R_C_MESSAGE = "STEP01: MU5350 R/C = " !! &R_C                 
          CALL RCMSG                                                            
                                                                                
          IF STEP01 > 97 GOTO STEP01y                                           
                                                                                
          IF STEP01 ne 0 RETURN CODE = STEP01 + 100                             
                                                                                
STEP01x:  ASSIGN &R_C_MESSAGE = "STEP01: MU5350 CANCELLED"                      
          CALL RCMSG                                                            
          RETURN CODE = 199                                                     
STEP01y:  RETURN CODE = 198                                                     
                                                                                
STEP01z:  EXTRACT &SYS_VOL = SYSVOL,                                            
                  &USER_ID = USERID                                             
                                                                                
***********************************************************************         
* STEP02 -- Get Fileink Parameters                                    *         
***********************************************************************         
STEP02:   CALL SPACEMSG                                                         
                                                                                
          IF EXISTS FILE &LINK_FILE in &LINK_LIB on &LINK_VOL                   
                    GOTO STEP02a                                                
                                                                                
          ASSIGN &R_C_MESSAGE = "STEP02: File NOT Found"                        
          CALL RCMSG                                                            
          RETURN CODE = 201                                                     
                                                                                
STEP02a:  RUN MG2159 in (FPSULOAD.LIBRARY) on (FPSULOAD.VOLUME)                 
              using &LINK_FILE,                                                 
                    &LINK_LIB,                                                  
                    &LINK_VOL,                                                  
                    &MG2159_OWNER,                                              
                    &MG2159_DATE,                                               
                    &MG2159_FILE_CLASS,                                         
                    &MG2159_EXPIRATION_DATE,                                    
                    &MG2159_FILE_TYPE,                                          
                    &MG2159_FILE_RECORD_SIZE,                                   
                    &MG2159_NUM_RECORDS,                                        
                    &MG2159_BLOCKS_FREE,                                        
                    &MG2159_BLOCKS_USED,                                        
                    &MG2159_BLOCKS_ALLOCATED                                    
              CANCEL EXIT is STEP02x                                            
              ERROR  EXIT is STEP02x                                            
                                                                                
          IF STEP02a = 0 GOTO STEP02c                                           
                                                                                
          ASSIGN &R_C         = STEP02a                                         
          ASSIGN &R_C_MESSAGE = "STEP02: MG2159 R/C = " !! &R_C                 
          CALL RCMSG                                                            
          RETURN CODE = 202                                                     
                                                                                
STEP02c:  IF &MG2159_EXPIRATION_DATE > &MG2159_DATE GOTO STEP02d                
          GOTO STEP02e                                                          
                                                                                
STEP02d:  CALL EXPRMSG                                                          
          ASSIGN &PAUSE_MSG = "Pausing STEP02d"                                 
          CALL PAUSE                                                            
          GOTO STEP02a                                                          
                                                                                
STEP02e:  RENAME &LINK_FILE in &LINK_LIB on &LINK_VOL                           
              to &LINK_FILE in &LINK_LIB                                        
                                                                                
          IF STEP02e ne 32 GOTO STEP02z                                         
                                                                                
STEP02f:  CALL USEMSG                                                           
          ASSIGN &PAUSE_MSG = "Pausing STEP02f"                                 
          CALL PAUSE                                                            
          GOTO STEP02e                                                          
                                                                                
STEP02x:  ASSIGN &MG2159_FILE_TYPE = "??"                                       
STEP02z:  [ continue ]                                                          
                                                                                
***********************************************************************         
* STEP03 -- Verify Link Parameters                                    *         
***********************************************************************         
STEP03:   IF &MG2159_FILE_TYPE = "I " GOTO STEP03a                              
          IF &MG2159_FILE_TYPE = "A " GOTO STEP03a                              
                                                                                
          ASSIGN &LINK_PROG = "C" [ Default to COPY ]                           
                                                                                
STEP03a:  IF &LINK_PROG = "C" GOTO STEP03c                                      
          IF &LINK_PROG = "O" GOTO STEP03b                                      
          ASSIGN &LINK_PROG = "C"                                               
          GOTO STEP03c                                                          
                                                                                
STEP03b:  IF EXISTS FILE OVEREASY in @SYSTEM@ on &SYS_VOL GOTO STEP03c          
          ASSIGN &LINK_PROG = "C"                                               
          GOTO STEP03c                                                          
                                                                                
STEP03c:  IF &LINK_TYPE     = "1" GOTO STEP03s                                  
          ASSIGN &LINK_TYPE = "2" [ Force 2 COPY REORG ]                        
                                                                                
          GOTO STEP03t                                                          
                                                                                
STEP03s:  IF &LINK_RENAME ne "        " GOTO STEP03t                            
          ASSIGN &LINK_RENAME = &LINK_FILE                                      
          ASSIGN &LINK_TYPE   = "2" [ Invalid &LINK_RENAME  ]                   
                                                                                
STEP03t:  IF &LINK_RENAME = "        " ASSIGN &LINK_RENAME = &LINK_FILE         
          IF &WORK_FILE   = "        " ASSIGN &WORK_FILE = &LINK_RENAME         
          IF &LINK_IPACK  = "   "      ASSIGN &LINK_IPACK  = "090"              
          IF &LINK_APACK  = "   "      ASSIGN &LINK_APACK  = "080"              
          IF &LINK_DPACK  = "   "      ASSIGN &LINK_DPACK  = "095"              
          IF &LINK_GROWTH = "     "    ASSIGN &LINK_GROWTH = "015.0"            
                                                                                
          EXTRACT &CP_R_C = RECORDS used by &LINK_FILE                          
                  in &LINK_LIB on &LINK_VOL                                     
                                                                                
          IF &CP_R_C < 500 ASSIGN &CP_R_C = 500                                 
          ASSIGN &LINK_SPACE = &LINK_SPACE + &CP_R_C                            
                                                                                
          IF &CP_R_C > &LINK_SPACE GOTO STEP03u                                 
                                                                                
          GOTO STEP03y                                                          
                                                                                
                                                                                
STEP03u:  ASSIGN &LINK_SPACE = &CP_R_C + 4000                                   
          GOTO STEP03y                                                          
                                                                                
STEP03y:  ASSIGN &CP_R_C = 0                                                    
          CALL   GETWORK                                                        
                                                                                
***********************************************************************         
* STEP04 -- Determine Work Volume                                     *         
***********************************************************************         
STEP04:   EXTRACT &BLOCKS = BLOCKS ALLOCATED FOR                                
                            &LINK_FILE in &LINK_LIB on &LINK_VOL                
                                                                                
********* ASSIGN &SPACE_06 = &WORK_VOL                                          
                                                                                
STEP04a:  RUN MG2158 in (FPSULOAD.LIBRARY) on (FPSULOAD.VOLUME)                 
              using &BLOCKS, &SPACE_06                                          
               ENTER MG10151S (MG10151S)                                        
                                                                                
          IF STEP04a = 0    GOTO STEP04g                                        
          IF STEP04a = 999  GOTO STEP04d                                        
                                                                                
          ASSIGN &R_C         = STEP04                                          
          ASSIGN &R_C_MESSAGE = "STEP04: MG2158 R/C = " !! &R_C                 
          CALL RCMSG                                                            
          RETURN CODE = 401                                                     
                                                                                
STEP04d:  MESSAGE ERASE = NO ROW 20                                             
                  CENTER "Pausing"                                              
          ASSIGN &PAUSE_COUNT = &PAUSE_COUNT + 1                                
          ASSIGN &PAUSE_MSG = "Pausing STEP04d"                                 
          CALL   PAUSE                                                          
          ASSIGN &SPACE_06 = "      "                                           
          IF &PAUSE_COUNT > &PAUSE_LIMIT CALL PAUSEMSG                          
          GOTO   STEP04a                                                        
                                                                                
STEP04g:  ASSIGN &WORK_VOL = &SPACE_06                                          
          ASSIGN &SPACE_06 = "      "                                           
          IF     &WORK_VOL = "      " RETURN CODE = 402                         
          MESSAGE ERASE = NO ROW 20                                             
                  CENTER "       "                                              
                                                                                
STEP04h:  IF &WORK_VOL  ne &LINK_VOL  goto STEP04z                              
          IF &WORK_LIB  ne &LINK_LIB  goto STEP04z                              
          IF &WORK_FILE ne &LINK_FILE goto STEP04z                              
          ASSIGN &R_C_MESSAGE = "STEP04h: File same as RENAME File"             
          CALL RCMSG                                                            
          RETURN CODE = 402                                                     
                                                                                
STEP04z:  [ continue ]                                                          
                                                                                
***********************************************************************         
* STEP05 -- Reorg the file                                            *         
***********************************************************************         
STEP05:   CALL PROGMSG                                                          
                                                                                
          IF &LINK_TYPE = "1" CALL CP1 [ Reorg using 1 COPY  ]                  
          IF &LINK_TYPE = "2" CALL CP2 [ Reorg using 2 COPYs ]                  
                                                                                
          IF &CP_R_C ne 0 RETURN CODE = 500 + &CP_R_C                           
                                                                                
***********************************************************************         
* EOJ -- End of Job                                                   *         
***********************************************************************         
EOJ:      CALL MG2165                                                           
          RETURN                                                                
                                                                                
*#####################################################################*         
*                      S U B R O U T I N E S                          *         
*#####################################################################*         
***********************************************************************         
* CP1 -- Reorganize the File using 1 COPY, this is faster than using  *         
*        2 COPIES but the file must NOT take up much room on disk     *         
***********************************************************************         
CP1:      ASSIGN &CP_R_C = 0                                                    
                                                                                
          IF &LINK_PROG = "C"                                                   
                        MESSAGE ERASE = NO ROW 24                               
                                CENTER "using COPY with RENAME"                 
          IF &LINK_PROG = "O"                                                   
                        MESSAGE ERASE = NO ROW 24                               
                                CENTER "using OVEREASY with RENAME"             
                                                                                
*---------------------------------------------------------------------*         
* CP1a    -- Scratch temporary copy of the file                       *         
*---------------------------------------------------------------------*         
CP1a:     RUN MGRB2155 in (FPSUPROC.LIBRARY) on (FPSUPROC.VOLUME)               
              using &WORK_FILE, &WORK_LIB, &LINK_VOL                            
              CANCEL EXIT is CP1aX                                              
                                                                                
          GOTO CP1aZ                                                            
                                                                                
CP1aX:    ASSIGN &CP_R_C = 1                                                    
          ASSIGN &R_C_MESSAGE = "CP1a: MGRB2155 Cancelled"                      
          CALL RCMSG                                                            
          GOTO EOJ                                                              
                                                                                
CP1aZ:    [ continue ]                                                          
                                                                                
*---------------------------------------------------------------------*         
* CP1b -- Rename file to temporary file                               *         
*---------------------------------------------------------------------*         
CP1b:     RENAME &LINK_FILE in &LINK_LIB on &LINK_VOL                           
              to &WORK_FILE in &WORK_LIB                                        
                                                                                
          IF CP1b = 0 GOTO CP1bZ                                                
                                                                                
          ASSIGN &R_C         = CP1b                                            
          ASSIGN &R_C_MESSAGE = "CP1b: RENAME R/C = " !! &R_C                   
          CALL RCMSG                                                            
          ASSIGN &CP_R_C = 2                                                    
          GOTO CP1z                                                             
                                                                                
CP1bZ:    IF &LINK_PROG = "C" GOTO CP1c  [ use COPY ]                           
                                                                                
          SCRATCH &LINK_RPT in (FPSURPTS.LIBRARY) on (FPSURPTS.VOLUME)          
          GOTO    CP1d  [ use OVEREASY ]                                        
                                                                                
*---------------------------------------------------------------------*         
* CP1c -- Copy file with reorg                                        *         
*---------------------------------------------------------------------*         
CP1c:     RUN COPY                                                              
              CANCEL EXIT is CP1cX                                              
               ENTER INPUT      FILE     = &WORK_FILE,                          
                                LIBRARY  = &WORK_LIB,                           
                                VOLUME   = &LINK_VOL                            
               ENTER OPTIONS    REORG    = YES,                                 
                                IPACK    = &LINK_IPACK,                         
                                DPACK    = &LINK_DPACK                          
               ENTER OUTPUT     FILE     = &LINK_FILE,                          
                                LIBRARY  = &LINK_LIB,                           
                                VOLUME   = &LINK_VOL,                           
                                RECORDS  = &LINK_SPACE,                         
                                FILECLAS = " ",                                 
                                RELEASE  = NO                                   
               ENTER EOJ        16                                              
                                                                                
          IF CP1c = 0 GOTO CP1cZ                                                
          ASSIGN &R_C         = CP1c                                            
          ASSIGN &R_C_MESSAGE = "CP1c: COPY R/C = " !! &R_C                     
          CALL RCMSG                                                            
          ASSIGN &CP_R_C   = 3                                                  
          GOTO   CP1z                                                           
                                                                                
CP1cX:    ASSIGN &CP_R_C   = 3                                                  
          ASSIGN &R_C_MESSAGE = "CP1c: COPY Cancelled"                          
          CALL RCMSG                                                            
          GOTO   CP1z                                                           
                                                                                
CP1cZ:    GOTO   CP1e                                                           
                                                                                
*---------------------------------------------------------------------*         
* CP1d -- Copy file using OVEREASY                                    *         
*---------------------------------------------------------------------*         
CP1d:     RUN OVEREASY                                                          
              CANCEL EXIT is CP1dX                                              
               ENTER INPUT      FILE     = &WORK_FILE,                          
                                LIBRARY  = &WORK_LIB,                           
                                VOLUME   = &LINK_VOL                            
               ENTER OPTIONS    GROWTHB  = "     ",                             
                                GROWTHP  = &LINK_GROWTH,                        
                                IPACK    = &LINK_IPACK,                         
                                APACK    = &LINK_APACK,                         
                                DPACK    = &LINK_DPACK                          
            B: ENTER OUTPUT     FILE     = &LINK_FILE,                          
                                LIBRARY  = &LINK_LIB,                           
                                VOLUME   = &LINK_VOL,                           
                                FILECLAS = " "                                  
               ENTER PRINT      FILE     = &LINK_RPT,                           
                                LIBRARY  = (FPSURPTS.LIBRARY),                  
                                VOLUME   = (FPSURPTS.VOLUME),                   
                                FILECLAS = " ",                                 
                                QUEUE    = NO                                   
               ENTER EOJ     16                                                 
                                                                                
          IF CP1d = 0 GOTO CP1dZ                                                
          IF CP1d = 4 GOTO CP1dZ [ FDR Record Count invalid ]                   
          ASSIGN &R_C         = CP1d                                            
          ASSIGN &R_C_MESSAGE = "CP1d: OVEREASY R/C = " !! &R_C                 
          CALL RCMSG                                                            
          ASSIGN &CP_R_C   = 5                                                  
          GOTO   CP1z                                                           
                                                                                
CP1dX:    ASSIGN &CP_R_C   = 5                                                  
          ASSIGN &R_C_MESSAGE = "CP1d: OVEREASY Cancelled"                      
          CALL RCMSG                                                            
          GOTO   CP1z                                                           
                                                                                
CP1dZ:    GOTO   CP1e                                                           
                                                                                
*---------------------------------------------------------------------*         
* CP1e -- Make sure file was created in the correct location          *         
*---------------------------------------------------------------------*         
CP1e:     IF EXISTS FILE &LINK_FILE in &LINK_LIB on &LINK_VOL                   
                    GOTO CP1eZ                                                  
                                                                                
          ASSIGN &R_C_MESSAGE = "CP1e: FILE NOT created in " !!                 
                                "Correct Location"                              
          CALL RCMSG                                                            
          ASSIGN &CP_R_C = 4                                                    
          GOTO   CP1z                                                           
                                                                                
CP1eZ:    [ continue ]                                                          
                                                                                
*---------------------------------------------------------------------*         
* CP1f -- Scratch temporary copy of the file                          *         
*---------------------------------------------------------------------*         
CP1f:     RUN MGRB2155 in (FPSUPROC.LIBRARY) on (FPSUPROC.VOLUME)               
              using &WORK_FILE, &WORK_LIB, &LINK_VOL                            
              CANCEL EXIT is CP1fZ                                              
                                                                                
CP1fZ:    [ continue ]                                                          
                                                                                
*---------------------------------------------------------------------*         
* CP1z -- End of Reorg with 1 COPY                                    *         
*---------------------------------------------------------------------*         
CP1z:     END                                                                   
                                                                                
***********************************************************************         
* CP2 -- Reorganize a File by copying it out to a temporary work      *         
*        temporary work file and copying is back to production. This  *         
*        method is used when the volume that holds the file does      *         
*        not contain much room                                        *         
***********************************************************************         
CP2:      ASSIGN &CP_R_C = 0                                                    
                                                                                
          IF &LINK_PROG = "O" GOTO CP2d  [ use OVEREASY ]                       
                                                                                
          MESSAGE ERASE = NO ROW 24                                             
                  CENTER "using COPY"                                           
                                                                                
          ASSIGN &REORG_1 = "YES"                                               
          ASSIGN &REORG_2 = "NO "                                               
                                                                                
          IF &MG2159_FILE_TYPE(1,1) = "I" GOTO CP2a                             
          IF &MG2159_FILE_TYPE(1,1) = "A" GOTO CP2a                             
                                                                                
          ASSIGN &REORG_1 = "NO "                                               
          ASSIGN &REORG_2 = "YES"                                               
                                                                                
*---------------------------------------------------------------------*         
* STEP200 -- Copy file to temporary file                              *         
*---------------------------------------------------------------------*         
CP2a:     RUN COPY                                                              
              CANCEL EXIT is CP2aX                                              
               ENTER INPUT      FILE     = &LINK_FILE,                          
                                LIBRARY  = &LINK_LIB,                           
                                VOLUME   = &LINK_VOL                            
               ENTER OPTIONS    REORG    = &REORG_1                             
     CP2TEMP:  ENTER OUTPUT     FILE     = &WORK_FILE,                          
                                LIBRARY  = &WORK_LIB,                           
                                VOLUME   = &WORK_VOL,                           
                                FILECLAS = " ",                                 
                                RELEASE  = YES                                  
               ENTER EOJ        16                                              
                                                                                
          IF CP2a = 0 GOTO CP2aZ                                                
          ASSIGN &R_C         = CP2a                                            
          ASSIGN &R_C_MESSAGE = "CP2a: COPY R/C = " !! &R_C                     
          CALL RCMSG                                                            
          ASSIGN &CP_R_C = 1                                                    
          GOTO   CP2z                                                           
                                                                                
CP2aX:    ASSIGN &CP_R_C = 1                                                    
          ASSIGN &R_C_MESSAGE = "CP2a: COPY Cancelled"                          
          CALL RCMSG                                                            
          GOTO   CP2z                                                           
                                                                                
CP2aZ:    [ continue ]                                                          
                                                                                
*---------------------------------------------------------------------*         
* CP2b -- Scratch the production file                                 *         
*---------------------------------------------------------------------*         
CP2b:     RUN MGRB2155 in (FPSUPROC.LIBRARY) on (FPSUPROC.VOLUME)               
              using &LINK_FILE, &LINK_LIB, &LINK_VOL                            
              CANCEL EXIT is CP2bZ                                              
                                                                                
CP2bZ:    [ continue ]                                                          
                                                                                
*---------------------------------------------------------------------*         
* CP2c -- Copy temp file back to production                           *         
*---------------------------------------------------------------------*         
CP2c:     RUN COPY                                                              
              CANCEL EXIT is CP2cX                                              
               ENTER INPUT      (CP2TEMP)                                       
               ENTER OPTIONS    REORG    = &REORG_2,                            
                                IPACK    = &LINK_IPACK,                         
                                DPACK    = &LINK_DPACK                          
               ENTER OUTPUT     FILE     = &LINK_FILE,                          
                                LIBRARY  = &LINK_LIB,                           
                                VOLUME   = &LINK_VOL,                           
                                RECORDS  = &LINK_SPACE,                         
                                FILECLAS = " ",                                 
                                RELEASE  = NO                                   
               ENTER EOJ        16                                              
                                                                                
          IF CP2c = 0 GOTO CP2cZ                                                
          ASSIGN &R_C         = CP2c                                            
          ASSIGN &R_C_MESSAGE = "CP2c: COPY R/C = " !! &R_C                     
          CALL RCMSG                                                            
          ASSIGN &CP_R_C = 3                                                    
          GOTO CP2z                                                             
                                                                                
CP2cX:    ASSIGN &CP_R_C = 3                                                    
          ASSIGN &R_C_MESSAGE = "CP2c: COPY Cancelled"                          
          CALL RCMSG                                                            
          GOTO CP2z                                                             
                                                                                
CP2cZ:    GOTO CP2v                                                             
                                                                                
*---------------------------------------------------------------------*         
* CP2d    -- Copy file to temporary file using OVEREASY               *         
*---------------------------------------------------------------------*         
CP2d:     MESSAGE ERASE = NO ROW 24                                             
                  CENTER "using OVEREASY"                                       
                                                                                
          IF &LINK_RPT(8,1) = " " ASSIGN &LINK_RPT(8,1) = "1"                   
          SCRATCH &LINK_RPT in (FPSURPTS.LIBRARY) on (FPSURPTS.VOLUME)          
                                                                                
CP2dC:    RUN OVEREASY                                                          
              CANCEL EXIT is CP2dX                                              
               ENTER INPUT      FILE     = &LINK_FILE,                          
                                LIBRARY  = &LINK_LIB,                           
                                VOLUME   = &LINK_VOL                            
               ENTER OPTIONS    GROWTHB  = "     ",                             
                                GROWTHP  = "000.0",                             
                                IPACK    = 100,                                 
                                APACK    = 100,                                 
                                DPACK    = 100                                  
      CP2TEMO: ENTER OUTPUT     FILE     = &WORK_FILE,                          
                                LIBRARY  = &WORK_LIB,                           
                                VOLUME   = &WORK_VOL,                           
                                FILECLAS = " "                                  
               ENTER PRINT      FILE     = &LINK_RPT,                           
                                LIBRARY  = (FPSURPTS.LIBRARY),                  
                                VOLUME   = (FPSURPTS.VOLUME),                   
                                FILECLAS = " ",                                 
                                QUEUE    = NO                                   
               ENTER EOJ     16                                                 
                                                                                
          IF CP2dC = 0 GOTO CP2dZ                                               
          IF CP2dC = 4 GOTO CP2dZ [ FDR Record Count invalid ]                  
          ASSIGN &R_C         = CP2dC                                           
          ASSIGN &R_C_MESSAGE = "CP2dC: OVEREASY R/C = " !! &R_C                
          CALL RCMSG                                                            
          ASSIGN &CP_R_C = 1                                                    
          GOTO   CP2z                                                           
                                                                                
CP2dX:    ASSIGN &CP_R_C = 1                                                    
          ASSIGN &R_C_MESSAGE = "CP2dC: OVEREASY Cancelled"                     
          CALL RCMSG                                                            
          GOTO   CP2z                                                           
                                                                                
CP2dZ:    [ continue ]                                                          
                                                                                
*---------------------------------------------------------------------*         
* CP2e -- Scratch the production file                                 *         
*---------------------------------------------------------------------*         
CP2e:     RUN MGRB2155 in (FPSUPROC.LIBRARY) on (FPSUPROC.VOLUME)               
              using &LINK_FILE, &LINK_LIB, &LINK_VOL                            
              CANCEL EXIT is CP2eZ                                              
                                                                                
CP2eZ:    [ continue ]                                                          
                                                                                
*---------------------------------------------------------------------*         
* CP2f -- Copy temp file back to production using OVEREASY            *         
*---------------------------------------------------------------------*         
CP2f:     IF &LINK_RPT(8,1) = "1" ASSIGN &LINK_RPT(8,1) = "2"                   
          SCRATCH &LINK_RPT in (FPSURPTS.LIBRARY) on (FPSURPTS.VOLUME)          
                                                                                
CP2fC:    RUN OVEREASY                                                          
              CANCEL EXIT is CP2dX                                              
               ENTER INPUT      (CP2TEMO)                                       
               ENTER OPTIONS    GROWTHB  = "     ",                             
                                GROWTHP  = &LINK_GROWTH,                        
                                IPACK    = &LINK_IPACK,                         
                                APACK    = &LINK_APACK,                         
                                DPACK    = &LINK_DPACK                          
               ENTER OUTPUT     FILE     = &LINK_FILE,                          
                                LIBRARY  = &LINK_LIB,                           
                                VOLUME   = &LINK_VOL,                           
                                FILECLAS = " "                                  
               ENTER PRINT      FILE     = &LINK_RPT,                           
                                LIBRARY  = (FPSURPTS.LIBRARY),                  
                                VOLUME   = (FPSURPTS.VOLUME),                   
                                FILECLAS = " ",                                 
                                QUEUE    = NO                                   
               ENTER EOJ     16                                                 
                                                                                
          IF CP2fC = 0 GOTO CP2fZ                                               
          IF CP2fC = 4 GOTO CP2fZ [ FDR Record Count invalid ]                  
          ASSIGN &R_C         = CP2fC                                           
          ASSIGN &R_C_MESSAGE = "CP2fC: OVEREASY R/C = " !! &R_C                
          CALL RCMSG                                                            
          ASSIGN &CP_R_C = 3                                                    
          GOTO CP2z                                                             
                                                                                
CP2fX:    ASSIGN &CP_R_C = 3                                                    
          ASSIGN &R_C_MESSAGE = "CP2fC: OVEREASY Cancelled"                     
          CALL RCMSG                                                            
          GOTO CP2z                                                             
                                                                                
CP2fZ:    GOTO CP2v                                                             
                                                                                
*---------------------------------------------------------------------*         
* CP2v -- Make sure file is in the correct location                   *         
*---------------------------------------------------------------------*         
CP2v:     IF EXISTS FILE &LINK_FILE in &LINK_LIB on &LINK_VOL                   
                    GOTO CP2vZ                                                  
                                                                                
          ASSIGN &R_C_MESSAGE = "CP2v: File NOT created in "  !!                
                                "correct location"                              
          CALL RCMSG                                                            
          ASSIGN &CP_R_C = 4                                                    
          GOTO   CP2z                                                           
                                                                                
CP2vZ:    [ continue ]                                                          
                                                                                
*---------------------------------------------------------------------*         
* CP2w -- Scratch Temporary File                                      *         
*---------------------------------------------------------------------*         
CP2w:     IF &LINK_PROG = "O" GOTO CP2wB                                        
                                                                                
          RUN MGRB2155 in (FPSUPROC.LIBRARY) on (FPSUPROC.VOLUME)               
              using (CP2TEMP.FILE), (CP2TEMP.LIBRARY),                          
                    (CP2TEMP.VOLUME)                                            
              CANCEL EXIT is CP2wZ                                              
                                                                                
          GOTO CP2wZ                                                            
                                                                                
CP2wB:    RUN MGRB2155 in (FPSUPROC.LIBRARY) on (FPSUPROC.VOLUME)               
              using (CP2TEMO.FILE), (CP2TEMO.LIBRARY),                          
                    (CP2TEMO.VOLUME)                                            
              CANCEL EXIT is CP2wZ                                              
                                                                                
CP2wZ:    [ continue ]                                                          
                                                                                
*---------------------------------------------------------------------*         
* CP2z -- End of 2 COPY Reorg                                         *         
*---------------------------------------------------------------------*         
CP2z:     END                                                                   
                                                                                
***********************************************************************         
* PAUSE -- Will pause execution                                       *         
***********************************************************************         
PAUSE:    MESSAGE ERASE = NO ROW 22                                             
                  CENTER &PAUSE_MSG(1,*)                                        
          RUN PAUSE in (VSSUBS.LIBRARY) on (VSSUBS.VOLUME)                      
                   using &SECONDS                                               
          ASSIGN &PAUSE_MSG = "                                       "         
          MESSAGE ERASE = NO ROW 22                                             
                  CENTER &PAUSE_MSG                                             
          END                                                                   
                                                                                
***********************************************************************         
* GETWORK -- Use CREATE to determine Work Lib and/or Vol              *         
***********************************************************************         
GETWORK:  RUN CREATE                                                            
     GETWORK1: ENTER OUTPUT     FILE     = ##TEMP,                              
                                TYPE     = C,                                   
                                RECSIZE  = 1,                                   
                                RECORDS  = 1                                    
               ENTER INPUT 16                                                   
               ENTER EOJ   16                                                   
                                                                                
                                                                                
          ASSIGN &WORK_VOL = (GETWORK1.VOLUME)                                  
END                                                                             
                                                                                
***********************************************************************         
* GETTASK -- get Task Number and convert it to a String               *         
***********************************************************************         
GETTASK:  EXTRACT &TASK_NUMBER = TASK#                                          
                                                                                
          IF &TASK_NUMBER > 999 GOTO GETTASKa                                   
          IF &TASK_NUMBER > 99  GOTO GETTASKb                                   
          IF &TASK_NUMBER > 9   GOTO GETTASKc                                   
                                                                                
          ASSIGN &TASK_LITERAL = "000" !! &TASK_NUMBER                          
          GOTO   GETTASKz                                                       
                                                                                
GETTASKa: ASSIGN &TASK_LITERAL = &TASK_NUMBER                                   
          GOTO   GETTASKz                                                       
                                                                                
GETTASKb: ASSIGN &TASK_LITERAL = "0" !! &TASK_NUMBER                            
          GOTO   GETTASKz                                                       
                                                                                
GETTASKc: ASSIGN &TASK_LITERAL = "00" !! &TASK_NUMBER                           
          GOTO   GETTASKz                                                       
                                                                                
GETTASKz: END                                                                   
                                                                                
***********************************************************************         
* PAUSEMSG -- Send a PAUSE Message                                    *         
***********************************************************************         
PAUSEMSG: ASSIGN &PAUSE_COUNT = 0                                               
                                                                                
          IF &MSG_PORT_NAME = "   " END                                         
                                                                                
          ASSIGN &MSG_MESSAGE        = &SPACE_75                                
          ASSIGN &MSG_MESSAGE(01,04) = "OPER"                                   
          ASSIGN &MSG_MESSAGE(72,04) = &TASK_LITERAL                            
          ASSIGN &MSG_MESSAGE(06,64) = &FILE_MESSAGE(1,*) !!                    
                 " MGRB2158, NOT Enough Work Space Available"                   
          CALL SENDMSG                                                          
END                                                                             
                                                                                
***********************************************************************         
* EXPRMSG  -- Send a Expiration Date Message                          *         
***********************************************************************         
EXPRMSG:  IF &MSG_PORT_NAME = "   " END                                         
                                                                                
          ASSIGN &MSG_MESSAGE        = &SPACE_75                                
          ASSIGN &MSG_MESSAGE(01,04) = "OPER"                                   
          ASSIGN &MSG_MESSAGE(72,04) = &TASK_LITERAL                            
          ASSIGN &MSG_MESSAGE(06,64) = &FILE_MESSAGE(1,*) !!                    
                 " MGRB2158, Expiration Date BAD"                               
          CALL SENDMSG                                                          
END                                                                             
                                                                                
***********************************************************************         
* PROGMSG --  Send an inprogress message                              *         
***********************************************************************         
PROGMSG:  IF &MSG_PORT_NAME = "   " END                                         
                                                                                
          ASSIGN &MSG_MESSAGE        = &SPACE_75                                
          ASSIGN &MSG_MESSAGE(01,04) = "FYI:"                                   
          ASSIGN &MSG_MESSAGE(72,04) = &TASK_LITERAL                            
          ASSIGN &MSG_MESSAGE(05,65) =                                          
                 &LOPROUL !! &FILE_MESSAGE(1,*) !!                              
                 &LOPRO   !! "MGRB2158, REORG in Progress"                      
          CALL SENDMSG                                                          
END                                                                             
                                                                                
***********************************************************************         
* SPACEMSG -- Verifying Work Space Message                            *         
***********************************************************************         
SPACEMSG: IF &MSG_PORT_NAME = "   " END                                         
PAUSEMSG: ASSIGN &PAUSE_COUNT = 0                                               
                                                                                
          ASSIGN &MSG_MESSAGE        = &SPACE_75                                
          ASSIGN &MSG_MESSAGE(01,04) = "FYI:"                                   
          ASSIGN &MSG_MESSAGE(72,04) = &TASK_LITERAL                            
          ASSIGN &MSG_MESSAGE(05,65) =                                          
                 &LOPROUL  !! &FILE_MESSAGE(1,*) !!                             
                 &LOPRO    !! "MGRB2158, Checking Work Space"                   
          CALL SENDMSG                                                          
END                                                                             
                                                                                
***********************************************************************         
* USEMSG   -- Verifying file in use                                   *         
***********************************************************************         
USEMSG:   IF &MSG_PORT_NAME = "   " END                                         
                                                                                
          ASSIGN &MSG_MESSAGE        = &SPACE_75                                
          ASSIGN &MSG_MESSAGE(01,04) = "FYI:"                                   
          ASSIGN &MSG_MESSAGE(72,04) = &TASK_LITERAL                            
          ASSIGN &MSG_MESSAGE(05,65) =                                          
                 &LOPROUL  !! &FILE_MESSAGE(1,*) !!                             
                 &LOPRO    !! "MGRB2158, "       !!                             
                 &HIPRO    !! "FILE in USE"                                     
          CALL SENDMSG                                                          
END                                                                             
                                                                                
***********************************************************************         
* RCMSG -- Send a return Code Message and log it                      *         
***********************************************************************         
RCMSG:    IF &MSG_PORT_NAME = "   " GOTO RCMSGg                                 
                                                                                
          ASSIGN &MSG_MESSAGE        = &SPACE_75                                
          ASSIGN &MSG_MESSAGE(01,04) = "Oper"                                   
          ASSIGN &MSG_MESSAGE(72,04) = &TASK_LITERAL                            
          ASSIGN &MSG_MESSAGE(05,65) =                                          
                 &LOPROUL  !! &FILE_MESSAGE(1,*) !!                             
                 &HIPRO    !! &R_C_MESSAGE                                      
          CALL SENDMSG                                                          
          CALL PAUSE                                                            
                                                                                
RCMSGg:   ASSIGN &MG2166_MESSAGE = "Procedure: MGRB2158 " !!                    
                                   &R_C_MESSAGE                                 
                                                                                
RCMSGh:   RUN MG2166 in (FPSULOAD.LIBRARY) on (FPSULOAD.VOLUME)                 
              using &MG2166_MESSAGE,                                            
                    &USER_ID,                                                   
                    &LINK_VOL,                                                  
                    &LINK_LIB,                                                  
                    &LINK_FILE,                                                 
                    &R_C                                                        
              CANCEL EXIT is RCMSGz                                             
              ERROR  EXIT is RCMSGz                                             
               ENTER MG21641C   FILE     = (MG21641C.FILE),                     
                                LIBRARY  = (MG21641C.LIBRARY),                  
                                VOLUME   = (MG21641C.VOLUME),                   
                                FILECLAS = " ",                                 
                                RECORDS  = 10000,                               
                                RELEASE  = NO                                   
                                                                                
RCMSGz:   END                                                                   
                                                                                
***********************************************************************         
* SENDMSG -- Will format the message and send it                      *         
***********************************************************************         
SENDMSG:  IF NOT EXISTS FILE MESSAGE in (VSSUBS.LIBRARY)                        
                                     on (VSSUBS.VOLUME) GOTO SENDMSGz           
                                                                                
SENDMSGa: RUN MESSAGE in (VSSUBS.LIBRARY) on (VSSUBS.VOLUME)                    
              USING &MSG_XM,                                                    
                    &MSG_PORT_NAME,                                             
                    &MSG_MESSAGE,                                               
                    &MSG_MESSAGE_SIZE,                                          
                    &MSG_RETURN_CODE                                            
                                                                                
SENDMSGz: END                                                                   
                                                                                
***********************************************************************         
* MG2165 -- Update MG21621I with Reorganize Information               *         
***********************************************************************         
MG2165:   IF NOT EXISTS FILE MG2165 in (FPSULOAD.LIBRARY)                       
                                    on (FPSULOAD.VOLUME) END                    
                                                                                
MG2165b:  RUN MU5350                                                            
              CANCEL EXIT is MG2165z                                            
              ERROR  EXIT is MG2165z                                            
               ENTER CATGET     CATNAME=MG21621I                                
     MG21621I: ENTER LOCATION                                                   
               ENTER CATGET                                                     
                                                                                
          IF MG2165b ne 0 END                                                   
                                                                                
          IF NOT EXISTS FILE (MG21621I) END                                     
                                                                                
MG2165g:  RUN MG2165 in (FPSULOAD.LIBRARY) on (FPSULOAD.VOLUME)                 
              CANCEL EXIT is MG2165z                                            
              ERROR  EXIT is MG2165z                                            
               ENTER ACCEPT     WSFILE   = &LINK_FILE,                          
                                WSLIB    = &LINK_LIB,                           
                                WSVOL    = &LINK_VOL,                           
                                WSUSER   = &USER_ID                             
               ENTER MG21621I   (MG21621I)                                      
                                                                                
                                                                                
MG2165z:  END                                                                   
                                                                                
***********########### End of Procedure MGRB2158 ##########************         
