Example - MFG Structures

This examples shows a Customizer rule written with several MFG structures.
Restriction: This topic applies only when the AppMaster Builder AddPack has been installed, and applies only to Windows platforms.

User rule:

 %* HERE IS THE RULE $DAYDEF                                501.
                                                            502.
 % DEFINE $DAYDEF( &DAY)                                    506.
     % &PREFIX = &SUBSTR( &DAY, 1, 24)                      507.
     % &CHR = &SUBSTR( &PREFIX, 24)                         508.
     % IF &CHR = '-'                                        509.
         % &PREFIX = &SUBSTR( &PREFIX, 1, 23)               510.
     % &SUFFIX = '-ENTRY'                                   511.
     % &DAYCTR = &DAYCTR + 1                                512.
     02  &PREFIX&SUFFIX.                                    513.
       03  FILLER &40+PIC S9(2) COMP SYNC VALUE +&LENGTH( &DAY). 
       % IF &LENGTH( &DAY) <= 16                            515.
         03  FILLER &40+PIC X(30) VALUE &QT&DAY&QT.         516.
       % ELSE                                               517.
         03  FILLER &40+PIC X(30) VALUE                     518.
                    &40+&QT&DAY&QT.                         519.
 % END                                                      520.
                                                            521.

All Lines:

The $DAYDEF rule uses the structures &SUBSTR and &LENGTH to build a data structure for a table. For each table entry, $DAYDE builds an 02-level data name and provides the values for the two 03-level entries VALUE clauses that follow it. The 02-level data name construct is &PREFIX&SUFFIX.

The value of &PREFIX is supplied by the formal argument &DAY, which receives its value from a rule call to $DAYDEF. For example, the first rule call in the program gives the value SUNDAY to &DAY. The structure &SUBSTR checks this value and allows acceptance of up to 24 characters; values longer than 24 characters are truncated. On the next line, &SUBSTR checks to see whether the 24th character (if there is one) is a hyphen. If it is a hyphen, it uses only 23 characters; this prevents a double hyphen, which would be undesirable; for example, you don't want a hyphen from the name followed by the hyphen of the suffix -ENTRY. SUNDAY is only 6 characters long, so the entire value is accepted for &PREFIX. Thus, the value of &PREFIX&SUFFIX for the first call is SUNDAY-ENTRY.

Now, $DAYDEF provides the VALUE clause values for the two 03-level data elements of SUNDAY-ENTRY. In the first 03 element, VALUE +&LENGTH( &DAY) becomes VALUE +6 because the value of &DAY, which is SUNDAY, is 6 characters long. The plus symbol is recognized as the COBOL plus symbol because there is a space before it. In contrast, the plus symbol in &40+PIC is recognized as a Customizer column indicator, which in this case means to put the PIC clause in column 41.

Line 515 checks to see whether the &DAY values fit on one line; for example, if they are 16 characters maximum. If it fits, its format is like line 516; remember that the line shifts under the % IF statement during processing. If it cannot fit, its format is the 2-line format on lines 518-519.

The value of &SUFFIX for each rule call is the literal string -ENTRY.

Program input:

 % &DAYCTR = 0                                              522.
 % &QT = "'"                                                523.
                                                            524.
 % SET BLANK                                                525.
 IDENTIFICATION DIVISION.                                   526.
 PROGRAM-ID.              EXAMPLE&INDEX( 'ABCDEFG', 'EF').  527.
 DATE-COMPILED.              &COMPILETIME.                  528.
*SPECIAL CONSIDERATIONS.                                    529.
*    A PIECE OF A SAMPLE PROGRAM TO DEMONSTRATE SOME        530.
*    OF THE SOURCE CODE GENERATOR STRUCTURES.               531.
                                                            532.
     --                                                     533.
     --                                                     534.
                                                            535.
 WORKING-STORAGE SECTION.                                   536.
                                                            537.
 01  DAY-TABLE.                                             538.
   $DAYDEF( 'SUNDAY')                                       539.
   $DAYDEF( 'MONDAY')                                       540.
   $DAYDEF( 'TUESDAY')                                      541.
   $DAYDEF( 'WEDNESDAY')                                    542.
   $DAYDEF( 'THURSDAY')                                     543.
   $DAYDEF( 'FRIDAY')                                       544.
   $DAYDEF( 'A-LARGE-SYMBOL-TO-CHECK-DAYDEF')               545.
 01  DAY-TABLE-REDEF             REDEFINES DAY-TABLE.       546.
   02  DAY-ENTRY                 OCCURS &DAYCTR.            547.
     03  DAY-LEN                 PIC S9(2) COMP SYNC.       548.
     03  DAY-BOL                 PIC X(30).                 549.
                                                            550.
 PROCEDURE DIVISION.                                        551.
                                                            552.
     --                                                     553.
     --                                                     554.

Lines 527-528:

&INDEX returns a number identifying the character position of the first occurrence of EF within ABCDEFG. The number is 5; thus, EXAMPLE&INDEX 'ABCDEFG', 'EF') becomes EXAMPLE5.

&COMPILETIME returns the current date and time each time the program compiles.

Lines 539-545:

These are seven rule calls to $DAYDEF, each providing a value for the &DAY argument in $DAYDEF.

Line 547:

The OCCURS clause value is initialized to 0 at the top of the program, and is used in $DAYDEF.

Program output:

052300 IDENTIFICATION DIVISION.                            526.
052400 PROGRAM-ID.                 EXAMPLE5.               527.
052500 DATE-COMPILED.              22 OCT 79 14.24.00.     528.
052600*SPECIAL CONSIDERATIONS.                             529.
052700*    A PIECE OF A SAMPLE PROG TO DEMONSTRATE SOME OF 530.
052800*    THE SOURCE CODE GENERATOR STRUCTURES.           531.
052900                                                     532.
053000     --                                              533.
053100     --                                              534.
053200                                                     535.
053300 WORKING-STORAGE SECTION.                            536.
053400                                                     537.
053500 01  DAY-TABLE.                                      538.
053600   02  SUNDAY-ENTRY.                                 539.
053602     03  FILLER        PIC S9(2) COMP SYNC VALUE +6  539.
053604     03  FILLER        PIC X(30) VALUE 'SUNDAY'.     539.
053700   02  MONDAY-ENTRY.                                 540.
053702     03  FILLER        PIC S9(2) COMP SYNC VALUE +6. 540.
053704     03  FILLER        PIC X(30) VALUE 'MONDAY'.     540.
053800   02  TUESDAY-ENTRY.                                541.
053802     03  FILLER        PIC S9(2) COMP SYNC VALUE +7. 541.
053804     03  FILLER        PIC X(30) VALUE 'TUESDAY'.    541.
053900   02  WEDNESDAY-ENTRY                               542.
053902     03  FILLER        PIC S9(2) COMP SYNC VALUE +9. 542.
053904     03  FILLER        PIC X(30) VALUE 'WEDNESDAY'.  542.
054000   02  THURSDAY-ENTRY.                               543.
054002     03  FILLER        PIC S9(2) COMP SYNC VALUE +8. 543.
054004     03  FILLER        PIC X(30) VALUE 'THURSDAY'.   543.
054100   02  FRIDAY-ENTRY.                                 544.
054102     03  FILLER        PIC S9(2) COMP SYNC VALUE +6. 544.
054104     03  FILLER        PIC X(30) VALUE 'FRIDAY'.     544.
054200   02  A-LARGE-SYMBOL-TO-CHECK-ENTRY.                545.
054202     03  FILLER        PIC S9(2) COMP SYNC VALUE +30.545.
054204     03  FILLER        PIC X(30) VALUE               545.
054206                    'A-LARGE-SYMBOL-TO-CHECK-DAYDEF'.545.
054300 01  DAY-TABLE-REDEF      REDEFINES DAY-TABLE.       546.
054400   02  DAY-ENTRY          OCCURS 7.                  547.
054500     03  DAY-LEN          PIC S9(2) COMP SYNC.       548.
054600     03  DAY-BOL          PIC X(30).                 549.
054700                                                     550.
054800 PROCEDURE DIVISION.                                 551.
054900                                                     552.
055000     --                                              553.
055100     --                                              554.