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.