Convert a number of maps to utilize a common layout. In this case, the layouts only handled the header information on the maps.

 

For best viewing, adjust your window to this width -------------------------->

 

The original source code:

 

0001 * MAP2: PROTOTYPE                                                      

0002 * INPUT USING MAP 'XXXXXXXX'                                           

0003 *     #LIST-VALUE(*) #SELECT(*)                                        

0004 DEFINE DATA PARAMETER                                                  

0005 1 #LIST-VALUE (A025/00001:00200)                                       

0006 1 #SELECT (A001/00001:00200)                                           

0007 END-DEFINE                                                             

0008 FORMAT PS=204 LS=080 ZP=OFF SG=OFF KD=OFF IP=OFF                       

0009 * MAP2: MAP PROFILES *****************************        200***********

0010 * .TTAAAMMOO   D I D I N D I D I        ?_)¬&:+(                       *

0011 * 204079        N0NNUCN_            X        01 SYSPROF NL             *

0012 ************************************************************************

0013 INPUT          (     IP=OFF                                           /*

0014                                                                        )

0015 /                                                                       

0016 /                                                                      

0017 /                                                                      

0018 /                                                                       

0019  002T #SELECT (001)  (AD=AIT'_' ) /*.99U001 A001 .

 

Source after executing conversion program:

 

0001 * MAP2: PROTOTYPE                                                       

0002 * INPUT USING MAP 'XXXXXXXX'                                            

0003 *     #LIST-VALUE(*) #SELECT(*)                                         

0004 DEFINE DATA PARAMETER                                                   

0005 1 #LIST-VALUE (A025/00001:00200)                                         

0006 1 #SELECT (A001/00001:00200)                                            

0007 END-DEFINE                                                              

0008 FORMAT PS=204 LS=080 ZP=OFF SG=OFF KD=OFF IP=OFF                         

0009 SET CONTROL 'Q' ' ' INPUT USING MAP 'TESTLAY '                          

0010 * MAP2: MAP PROFILES *****************************        200***********

0011 * .TTAAAMMOO   D I D I N D I D I        ?_)¬&:+(                       *

0012 * 204079TESTLAY N0YNUCN_            X        01 SYSPROF NL             *

0013 ************************************************************************

0014 INPUT NO ERASE (     IP=OFF                                           /*

0015                                                                        )

0016 /                                                                       

0017 /                                                                       

0018 /                                                                        

0019 /                                                                       

 

The conversion program:

 

0010 DEFINE DATA LOCAL                                                

0020 1 SYSTEM-FUSER VIEW OF SYSTEM-FUSER                               

0030   2 SRCID                                                        

0040   2 REDEFINE SRCID                                               

0050     3 #LIBRARY(A8)                                               

0060     3 #PROGRAM(A8)                                               

0070     3 #SEQ-NBR(B2) /* Tells us how many chunks exist             

0080   2 C*SRCTX        /* Tells us how many source lines in each chunk

0090   2 SRCTX(1:191)                                                  

0100   2 REDEFINE SRCTX                                               

0110     3 #SOURCE(1:191)                                             

0120       4 #BINARY-COUNT(B2)                                        

0130       4 #REAL-SOURCE(A88)                                        

0140       4 REDEFINE #REAL-SOURCE                                    

0150         5 FILLER 72X                                             

0160         5 #EIGHT(A8)                                              

0170         5 #LAST-EIGHT(A8)                                        

0180 1 #NEW-RECORD(A90)                                               

0190 1 REDEFINE #NEW-RECORD                                           

0200   2 #NEW-COUNT(B2)                                                

0210   2 #NEW-SOURCE(A88) /* to your layout                    

0220 /* Modify the value in #LINE1 below pointing to your layout

0230 1 #LINE1(A88) INIT <'SET CONTROL "Q" " " INPUT USING MAP'>

0240 1 #BINARY-TWO(P5)                                         

0250 1 #LIB-SRC(A18)                                           

0260 1 REDEFINE #LIB-SRC                                       

0270   2 #LIBRARY(A8)                                          

0280   2 #PROGRAM(A8)                                          

0290   2 #SEQ-NBR(B2)                                          

0300 1 #I(I2)                                                  

0310 1 #J(I2)                                                  

0320 1 #K(I2)                                                  

0330 1 #COUNT(I2)                                              

0340 1 #CHANGED(L)                                             

0350 1 #MAP-LAYOUT(A8)                                         

0360 1 #MAP-SIZE(A6)                                           

0370 1 REDEFINE #MAP-SIZE                                      

0380   2 #MAP-PAGESIZE(A3)                                     

0390   2 #MAP-LINESIZE(A3)                                     

0400   2 REDEFINE #MAP-LINESIZE                                

0410     3 #MAP-LINES(N3)                                                   

0420 1 #WHERE(I1)                                                           

0430 END-DEFINE                                                              

0440 FORMAT LS=132 PS=20                                                    

0450 MOVE 0 TO #LIB-SRC.#SEQ-NBR                                            

0460 /* Modify the STACK and INPUT as needed to read the proper source      

0470 /* module into this program for update                                 

0480 STACK TOP DATA 'PLUSDEV,DDHMAP02,TESTLAY'                              

0490 INPUT #LIB-SRC.#LIBRARY (AD=T) #LIB-SRC.#PROGRAM (AD=T)                

0500   #MAP-LAYOUT(AD=T)                                                    

0510 READ SYSTEM-FUSER BY SRCID = #LIB-SRC                                  

0520   IF SYSTEM-FUSER.#PROGRAM NE #LIB-SRC.#PROGRAM                        

0530     ESCAPE BOTTOM                                                       

0540   END-IF                                                               

0550 **WRITE NOTITLE NOHDR                          /* Uncomment this block

0560 **  SYSTEM-FUSER.#LIBRARY                      /* to display the parms

0570 **  SYSTEM-FUSER.#PROGRAM                      /* when each new block

0580 **  SYSTEM-FUSER.#SEQ-NBR(EM=HH)               /* of source code is  

0590 **  '='C*SRCTX                                 /* read into the program

0600   MOVE C*SRCTX TO #COUNT                                               

0610   FOR #I 1 C*SRCTX                                                    

0620     MOVE SRCTX(#I) TO #NEW-RECORD                                     

0630     DECIDE FOR FIRST CONDITION                                        

0640       WHEN SUBSTRING(#NEW-SOURCE,1,6) = 'FORMAT'                      

0650         EXAMINE #NEW-SOURCE FOR 'PS=' GIVING POSITION #WHERE          

0660         IF #WHERE GT 0                                                 

0670           ADD 3 TO #WHERE                                             

0680           MOVE SUBSTRING(#NEW-SOURCE,#WHERE,3) TO #MAP-PAGESIZE       

0690         END-IF                                                         

0700         EXAMINE #NEW-SOURCE FOR 'LS=' GIVING POSITION #WHERE          

0710         IF #WHERE GT 0                                                

0720           ADD 3 TO #WHERE                                             

0730           MOVE SUBSTRING(#NEW-SOURCE,#WHERE,3) TO #MAP-LINESIZE       

0740           SUBTRACT 1 FROM #MAP-LINES                                  

0750         END-IF                                                        

0760         WRITE #NEW-COUNT (EM=HH) #NEW-SOURCE                          

0770           / '=' #MAP-PAGESIZE '=' #MAP-LINESIZE                       

0780         MOVE #NEW-RECORD TO SRCTX(#I)            /* Load the update rec

0790         MOVE #BINARY-COUNT(#I) TO #BINARY-TWO    /* Move to work field

0800         UPDATE                                                        

0810         END TRANSACTION                                                

0820 **      SUBTRACT 1 FROM #COUNT                   /* This entire block is

0830         #K := #I + 1                             /* set up to shift all

0840         FOR #J #COUNT #K STEP -1                 /* array elements right

0850           MOVE SRCTX(#J) TO SRCTX(#J+1)          /* one occurrence right

0860         END-FOR                                                         

0870         ADD 1 TO #BINARY-TWO                     /* Bump the count by 1

0880         MOVE #BINARY-TWO TO #NEW-COUNT           /* Put it in new record

0890         COMPRESS #LINE1 '"' INTO #LINE1                                 

0900         COMPRESS #LINE1 #MAP-LAYOUT '"' INTO #LINE1 LEAVING NO         

0910         MOVE #LINE1 TO #NEW-SOURCE               /* Load new line data 

0920         MOVE TRUE TO #CHANGED                    /* Signal the change  

0930 **      WRITE #NEW-COUNT (EM=HH) #NEW-SOURCE                           

0940         MOVE #NEW-RECORD TO SRCTX(#K)            /* Load the new update

0950         UPDATE                                   /* into empty slot for

0960         END TRANSACTION                          /* occurrence update  

0970       WHEN SUBSTRING(#NEW-SOURCE,3,6) = #MAP-SIZE /* Is this a comment?

0980 **                                      Change this value to the size  

0990 **                                      of the map; this code could be 

1000 **                                      derived from the FORMAT state- 

1010 **                                      ment's PS and LS parameters    

1020 **                                      making the program that much   

1030 **                                      more dynamic.                  

1040         MOVE #REAL-SOURCE(#I) TO #NEW-SOURCE     /* Move to work field 

1050         MOVE 'TESTLAY ' TO SUBSTRING(#NEW-SOURCE,9,8) /* Insert layout 

1060         MOVE 'Y'        TO SUBSTRING(#NEW-SOURCE,19,1) /* Insert "Y"es 

1070         MOVE #BINARY-COUNT(#I) TO #BINARY-TWO    /* Move to work field 

1080         ADD 1 TO #BINARY-TWO                     /* Bump the count by 1

1090         MOVE #BINARY-TWO TO #NEW-COUNT           /* Put it in new record

1100         WRITE #NEW-COUNT (EM=HH) #NEW-SOURCE                           

1110         MOVE #NEW-RECORD TO SRCTX(#I)            /* Load the update rec

1120         UPDATE                                                          

1130         END TRANSACTION                                                

1140       WHEN SUBSTRING(#NEW-SOURCE,1,5) = 'INPUT'  /* Insert "NO ERASE"? 

1150           AND #NEW-SOURCE = SCAN 'IP=OFF'        /* Insurance scan     

1160         MOVE #REAL-SOURCE(#I) TO #NEW-SOURCE     /* Move to work field 

1170         MOVE 'NO ERASE' TO SUBSTRING(#NEW-SOURCE,7,8)                  

1180         MOVE #BINARY-COUNT(#I) TO #BINARY-TWO    /* Move to work field 

1190         ADD 1 TO #BINARY-TWO                     /* Bump the count by 1

1200         MOVE #BINARY-TWO TO #NEW-COUNT           /* Put it in new record

1210         WRITE #NEW-COUNT (EM=HH) #NEW-SOURCE                           

1220         MOVE #NEW-RECORD TO SRCTX(#I)            /* Load the update rec

1230         UPDATE                                                         

1240         END TRANSACTION                                                

1250       WHEN NONE                                  /* Once we've added a 

1260         IF #CHANGED                              /* new line then each 

1270           MOVE #BINARY-COUNT(#I) TO #BINARY-TWO  /* following line needs

1280           ADD 1 TO #BINARY-TWO                   /* its count bumped   

1290           MOVE #BINARY-TWO TO #NEW-COUNT                               

1300           WRITE #NEW-COUNT (EM=HH) #NEW-SOURCE                         

1310           MOVE #NEW-RECORD TO SRCTX(#I)                                

1320         ELSE                                                            

1330           WRITE #NEW-COUNT (EM=HH) #NEW-SOURCE   /* Normal processing  

1340           MOVE #NEW-RECORD TO SRCTX(#I)          /* since we haven't   

1350         END-IF                                   /* a new line yet     

1360         UPDATE                                                         

1370         END TRANSACTION                                                

1380     END-DECIDE                                                          

1390   END-FOR                                                              

1400 **ESCAPE ROUTINE /* remove if you want more than one chunk of source   

1410 END-READ

1420 END

 

You may want to place the READ within a REPEAT if more than one map needs

modification.