         MACRO                                                          00400010
&NAME    IEDRH &RHIND=,&BSTATE=NO                                       00800010
.*A000000-999999                                               @X50X9MH 01200010
.*C172000                                                      @Y17XAMG 01400010
         GBLA  &IEDQZE(64)                                              01600010
         GBLB  &IEDQZA(64)                                              02000010
         LCLC  &INDNAME(8)                                              02400010
         LCLA  &VLDGRP(8)                                               02800010
         LCLB  &DUP(8)                                                  03200010
         LCLA  &SUBGRP                                                  03600010
         LCLC  &GRPNAME                                                 04000010
         LCLB  &SIGN(2)                                                 04400010
         LCLC  &PRMLST                                                  04800010
         LCLA  &TBLCTR                                                  05200010
         LCLA  &OPCTR                                                   05600010
         LCLA  &L                                                       06000010
         LCLC  &CHAROP                                                  06400010
         LCLB  &PL(24)                                                  06800010
         LCLA  &P                                                       07200010
         LCLB  &NOGO                                                    07600010
         LCLA  &TBLSIZE                                                 08000010
.* &RHIND CONTAINS ALL INDICATORS SPECIFIED FOR THE MACRO               08400010
.* &INDNAME CONTAINS THE NAMES OF ALL POSSIBLE INDICATORS               08800010
.* &VLDGRP CONTAINS A VALUE FOR THE SUBGROUPS IN WHICH THE INDICATOR    09200010
.*        IS VALID                                                      09600010
.* &DUP TELLS WHETHER THE INDICATOR WAS PREVIOUSLY SPECIFIED            10000010
.* &SUBGRP CONTAINS A VALUE REPRESENTING THE SUBGROUP IN WHICH THE      10400010
.*        MACRO IS PRESENTLY CODED                                      10800010
.* &GRPNAME CONTAINS THE CHARACTER NAME OF A SUBGROUP                   11200010
.* &SIGN HAS VALUES FOR THE + OR - OR * SPECIFIED WITH THE INDICATOR    11600010
.* &PL CONTAINS BIT VALUES FOR THE OPERAND PARAMETER LIST               12000010
.* &OPCTR AND &TBLCTR ARE COUNTERS USED TO LOOP THROUGH INDICATORS AND  12400010
.*        INDICATOR TABLE                                               12800010
.* &CHAROP CONTAINS THE INDICATOR WITHOUT ITS SIGN                      13200010
.* &L CONTAINS THE NO. OF CHARACTERS IN THE INDICATOR EXCLUDING THE     13600010
.*             SIGN                                                     14000010
.* &P TELLS THE INDICATOR POSITION IN THE OPERAND PARAMETER LIST        14400010
.* &NOGO IS A SWITCH THAT DETERMINES IF ERRORS WERE MADE IN THE MACRO   14800010
.* &TBLSIZE CONTAINS THE TOTAL NUMBER OF INDICATORS THAT CAN BE         15200010
.*         SPECIFIED IN THE IEDRH MACRO                                 15600010
.*                                                                      16000010
.*                                                                      16400010
.* START MH ISSUED ?                                                    16800010
         AIF   (&IEDQZA(46)).CKSBGRP    STARTMH CODED?         @Y17XAMG 17200010
         MNOTE 12,'***IHB312 MACRO MUST FOLLOW  STARTMH MACRO'          17600010
&NOGO    SETB  1                                                        18400010
.*                                                                      18800010
.* THIS CODE DETERMINES IN WHICH SUBGROUP THE MACRO IS CODED            19200010
.CKSBGRP AIF   (&IEDQZA(5)).BADSUB                                      19600010
         AIF   (&IEDQZA(1)).INPUT                                       20000010
         AIF   (&IEDQZA(4)).OUTHDR                                      20400010
         AIF   (&IEDQZA(2)).OUTBUF                                      20800010
.BADSUB  MNOTE 12,'***IHB070 SEQUENCE ERROR-MUST FOLLOW INBLOCK,INHDR,IX21200010
               NBUF,OUTHDR OR OUTBUF'                                   21600010
&NOGO   SETB  1                                                         22000010
.*                                                                      22400010
.* INITIALIZE THE PRESENT SUBGROUP VALUE                                22800010
.INPUT   ANOP                                                           23200010
&SUBGRP  SETA  1                                                        23600010
         AGO   .CKOPRND                                                 24000010
.OUTHDR  ANOP                                                           24400010
&GRPNAME SETC  'OUTHDR'                                                 24800010
&SUBGRP  SETA  2                                                        25200010
         AGO   .CKOPRND                                                 25600010
.OUTBUF  ANOP                                                           26000010
&GRPNAME SETC  'OUTBUF'                                                 26400010
&SUBGRP  SETA  3                                                        26800010
.*                                                                      27200010
.* IEDRH CODED WITH NO OPERANDS?                                        27600010
.CKOPRND  AIF   ('&RHIND' NE '' ).RHSPEC                                28000010
          AIF   ('&BSTATE' NE 'NO').BSTSPEC                             28400010
          MNOTE 4,'***IHB001 RHIND OR BSTATE = YES  NOT SPECIFIED'      28800010
          AGO   .EXIT                                                   29200010
.*                                                                      29600010
.*THE RHIND OPERAND HAS BEEN SPECIFIED                                  30000010
.RHSPEC   ANOP                                                          30400010
          AIF   ('&RHIND'(1,1) EQ '(').INIT                             30800010
          MNOTE 12,'***IHB711 LEFT PARENTHESIS IS MISSING'              31200010
          AGO .BSTSPEC                                                  31600010
.*                                                                      32000010
.* INITIALIZE THE OPERAND NAME TABLE                                    32400010
.INIT    ANOP                                                           32800010
&TBLSIZE  SETA    8                                                     33200010
&INDNAME(1) SETC 'SELCDE'                                               33600010
&INDNAME(2) SETC 'DFC'                                                  34000010
&INDNAME(3) SETC 'EXR'                                                  34400010
&INDNAME(4) SETC 'FMDATA'                                               34800010
&INDNAME(5) SETC 'EB'                                                   35200010
&INDNAME(6) SETC 'BB'                                                   35600010
&INDNAME(7) SETC 'FMH'                                                  36000010
&INDNAME(8) SETC 'CHNGDIR'                                              36400010
.*                                                                      36800010
.* INITIALIZE  VALUES FOR THE VALID SUBGROUP                            37200010
.* 1 MEANS VALID IN INBLOCK,INHDR,INBUF                                 37600010
.* 2 MEANS VALID IN INBLOCK,INHDR,INBUF,OUTHDR                          38000010
.* 3 MEANS VALID IN INBLOCK,INHDR,INBUF,OUTHDR,OUTBUF                   38400010
&VLDGRP(1) SETA 3                                                       38800010
&VLDGRP(2) SETA 1                                                       39200010
&VLDGRP(3) SETA 1                                                       39600010
&VLDGRP(4) SETA 1                                                       40000010
&VLDGRP(5) SETA 2                                                       40400010
&VLDGRP(6) SETA 2                                                       40800010
&VLDGRP(7) SETA 3                                                       41200010
&VLDGRP(8) SETA 3                                                       41600010
.*                                                                      42000010
.*                                                                      42400010
.* THE FOLLOWING CODE LOOPS THROUGH THE INDICATORS SPECIFIED ON THE     42800010
.* RHIND OPERAND. EACH INDICATOR IS VALIDITY CHECKED,AND APPROPRIATE    43200010
.* PARAMETER LIST BITS ARE INITIALIZED.                                 43600010
.*                                                                      44000010
.* INITIAL VALUE OF &OPCTR IS 0                                         44400010
.*                                                                      44800010
.* START OF LOOP                                                        45200010
.OPLOOP  ANOP                                                           45600010
&OPCTR   SETA  &OPCTR+1                                                 46000010
.* GET OUT AT END OF LOOP                                               46400010
         AIF   (&OPCTR GT N'&RHIND).ENDLOOP                             46800010
.*                                                                      47200010
         AIF   ('&RHIND(&OPCTR)' EQ '').OPLOOP                          47600010
&L       SETA  (K'&RHIND(&OPCTR))-1                                     48000010
         AIF   (&L LT 2 OR &L GT 7).BADIND                              48400010
.*                                                                      48800010
.* SEARCH THE INDICATOR NAME TABLE TO FIND THE CURRENT INDICATOR        49200010
&TBLCTR  SETA  0                                                        49600010
&CHAROP  SETC  '&RHIND(&OPCTR)'(2,&L)                                   50000010
.*                                                                      50400010
.TBLLOOP ANOP                                                           50800010
&TBLCTR  SETA  &TBLCTR+1                                                51200010
.* GET OUT AT END OF LOOP                                               51600010
         AIF   (&TBLCTR GT &TBLSIZE).BADIND                             52000010
         AIF   ('&CHAROP' NE '&INDNAME(&TBLCTR)').TBLLOOP               52400010
.*                                                                      52800010
.* THIS CODE CHECKS FOR A VALID SIGN VALUE                              53200010
.* SET FOR MINUS SIGN                                                   53600010
&SIGN(1) SETB  0                                                        54000010
&SIGN(2) SETB  1                                                        54400010
         AIF   ('&RHIND(&OPCTR)'(1,1) EQ '-').CKSGRP                    54800010
.* SET FOR PLUS                                                         55200010
&SIGN(1) SETB  1                                                        55600010
&SIGN(2) SETB  0                                                        56000010
         AIF   ('&RHIND(&OPCTR)'(1,1) EQ '+').CKSGRP                    56400010
.* SET FOR ASTERISK                                                     56800010
&SIGN(2) SETB  1                                                        57200010
         AIF   ('&RHIND(&OPCTR)'(1,1) NE '*').BADIND                    57600010
         AIF   ('&CHAROP' NE 'BB' AND '&CHAROP' NE 'EB' AND '&CHAROP'  X58000010
               NE 'CHNGDIR').BADIND                                     58400010
.* ASTERISK ONLY VALID FOR OUTPUT SIDE OF MESSAGE HANDLER               58800010
         AIF   (NOT &IEDQZA(4) AND '&GRPNAME' NE 'OUTBUF').BADGRP       59200010
.* CHNGDIR IS ONLY * INDICATOR VALID IN OUTBUF SUBGROUP                 59600010
         AIF   ('&GRPNAME' EQ 'OUTBUF' AND '&CHAROP' NE 'CHNGDIR').BADGX60000010
               RP                                                       60400010
         AGO   .CKSGRP                                                  60800010
.*                                                                      61200010
.BADIND  MNOTE 12,'***IHB300 &RHIND(&OPCTR) OPERAND INVALID AS SPECIFIEX61600010
               D'                                                       62000010
&NOGO    SETB  1                                                        62400010
         AGO   .OPLOOP                                                  62800010
.*                                                                      63200010
.* THIS CODE DETERMINES IF THE INDICATOR IS VALID IN THIS SUBGROUP      63600010
.CKSGRP  AIF   (&SUBGRP LE &VLDGRP(&TBLCTR)).CKDUP                      64000010
.BADGRP  MNOTE 12,'***IED908 &RHIND(&OPCTR) INVALID IN &GRPNAME SUBGROUX64400010
               P'                                                       64800010
&NOGO    SETB  1                                                        65200010
         AGO   .OPLOOP                                                  65600010
.*                                                                      66000010
.* THIS CODE DETERMINES IF THE INDICATOR IS SPECIFIED MORE THAN ONCE    66400010
.CKDUP   AIF   (NOT &DUP(&TBLCTR)).SETDUP                               66800010
         MNOTE 4,'***IED909 &CHAROP DUPLICATE OPERAND SPECIFIED --- ** *67200010
               IGNORED'                                                 67600010
         AGO   .OPLOOP                                                  68000010
.*                                                                      68400010
.* THIS CODE TURNS ON THE DUPLICATE BIT AND SETS THE SIGN BITS IN THE   68800010
.* PARAMETER LIST                                                       69200010
.SETDUP  ANOP                                                           69600010
&DUP(&TBLCTR) SETB  1                                                   70000010
&P      SETA  (2*&TBLCTR)-1                                             70400010
&PL(&P) SETB (&SIGN(1))                                                 70800010
&PL(&P+1) SETB (&SIGN(2))                                               71200010
         AGO   .OPLOOP                                                  71600010
.*                                                                      72000010
.*                                                                      72400010
.* BOTH DFC AND FMDATA SPECIFIED?                                       72800010
.ENDLOOP AIF   (NOT(&DUP(2) AND &DUP(4))).BSTSPEC                       73200010
         MNOTE 12,'***IHB346 DFC AND FMDATA MUTUALLY EXCLUSIVE'         73600010
&NOGO    SETB  1                                                        74000010
.*                                                                      74400010
.*                                                                      74800010
.* BSTATE SPECIFIED?                                                    75200010
.BSTSPEC AIF   ('&BSTATE' EQ 'NO').ERRORCK                              75600010
         AIF   ('&BSTATE' EQ 'YES').BSTOK                               76000010
         MNOTE 12,'***IHB002 INVALID BSTATE OPERAND SPECIFIED &BSTATE'  76400010
         AGO   .EXIT                                                    76800010
.*                                                                      77200010
.BSTOK  ANOP                                                            77600010
&PL(17) SETB  1                                                         78000010
.*                                                                      78400010
.*                                                                      78800010
.ERRORCK AIF   (&NOGO).EXIT                                             79200010
&PRMLST  SETC  '&PL(1)&PL(2)&PL(3)&PL(4)&PL(5)&PL(6)&PL(7)&PL(8)&PL(9)&X79600010
               PL(10)&PL(11)&PL(12)&PL(13)&PL(14)&PL(15)&PL(16)&PL(17)&X80000010
               PL(18)&PL(19)&PL(20)&PL(21)&PL(22)&PL(23)&PL(24)'        80400010
.*                                                                      80800010
.* CODE TO GENERATE PARAMETER LIST AND BRANCH TO IEDIAR MODULE          81200010
&NAME    DS    0H                                                       81600010
         IEDQVCON 62,IEDIAR                                             82000010
         BAL   1,*+10                  BRANCH AROUND PARM LIST          82400010
         DC    AL1(&IEDQZE(62))        INDEX OF PARM LIST               82800010
         DC    AL1(5)                  LENGTH OF PARM LIST              83200010
         DC    BL3'&PRMLST'                                             83600010
         DS    0H                                                       84000010
         L     15,IEDUI                                                 84400010
         BALR  14,15                                                    84800010
.EXIT    ANOP                                                           85200010
         MEND                                                           85600010
