*********************************************************************** 00020000
*        TITLE           IEHMVESJ                                     * 00040000
*                                                                    *  00060000
*        FUNCTION          THIS IS THE CONTROL CARD SCAN ROUTINE     *  00080000
*                          USED BY THE IEHMOVE PROGRAM               *  00100000
*                                                                    *  00120000
*                          IT READS AND SCANS FIELDS OF THE IEHMOVE  *  00140000
*                          CONTROL CARDS PASSING EACH FIELD AS IT IS *  00160000
*                          ENCOUNTERED TO THE IEHMOVE CONTROL CARD   *  00180000
*                          ANALYZER ROUTINE                          *  00200000
*                                                                    *  00220000
*        ENTRY POINTS    IEHMVESJ  VIA XCTL FROM THE IEHMOVE CONTROL  * 00240000
*                                  CARD ANALYZER ROUTINE, IEHMVESS    X 00260000
*                                                                     * 00280000
*                        KEOF      END OF FILE ENTRY                  * 00300000
*                                                                    *  00320000
*        INPUT             IEHMOVE COMMUNICATIONS AND WORK AREA      *  00340000
*                          DESCRIBED IN MACRO EXPANSION OF IEHMVV    *  00360000
*                                                                    *  00380000
*        OUTPUT          SAME AS INPUT AREA                           * 00400000
*                                                                     * 00420000
*        EXTERNAL ROUTINES:                                           * 00440000
*                        IEHMVESU  VIA LINK TO PRINT CARD IMAGES      * 00460000
*                                                                     * 00480000
*                        IEHMVESS  VIA XCTL TO CONTROL CARD ANALYZER  * 00500000
*                                  ROUTINE                            * 00520000
*                                                                     * 00540000
*        EXITS:                                                       * 00560000
*              NORMAL    IEHMVESS                                     * 00580000
*              ERROR     NONE                                         * 00600000
*                                                                    *  00620000
*        TABLES WORK AREA  DSACT IN MACRO EXPANSION IEHMVV           *  00640000
*                                                                    *  00660000
*        ATTRIBUTES      SERIALLY REUSEABLE                           * 00680000
*                                                                     * 00700000
*********************************************************************** 00720000
         EJECT                                                          00740000
IEHMVSSJ START                                                          00760000
RDCDRT   CSECT                                                          00780000
*D100800                                                        OY01173 00785016
*                                                                PM3343 00790018
*                                                                A37900 00792021
*                                                                       00800000
*                             REGISTER NOTATION AND USAGE               00820000
*                                                                       00840000
REG0     EQU   0                        PARAM REG                       00860000
REG1     EQU   1                        PARAM REG                       00880000
REG2     EQU   2                        WORK REG                        00900000
REG3     EQU   3                        WORK REG                        00920000
REG4     EQU   4                        WORK REG                        00940000
REG5     EQU   5                        WORK REG                        00960000
REG7     EQU   7                        BASE FOR SWITCHRD               00980000
REG9     EQU   9                                                        01000000
REG10    EQU   10                                                       01020000
REG11    EQU   11                       BASE FOR IEHMVESJ               01040000
REG12    EQU   12                       BASE FOR IEHMVV                 01060000
REG15    EQU   15                       ENTRY POINT REG                 01080000
*                                                                       01100000
*                             EQUATE STATEMENTS                         01120000
*                                                                       01140000
BLANK    EQU   X'40'                                                    01160000
ABORT    EQU   X'01'                                                    01180000
ZERO     EQU   X'00'                                                    01200000
*                             THE FOLLOWING VALUES ARE USED TO SET      01220000
*                             SWITCHES IN DSECT, SWITCHRD               01240000
BIT0     EQU   X'80'                                                    01260000
BIT1     EQU   X'40'                                                    01280000
BIT2     EQU   X'20'                                                    01300000
BIT3     EQU   X'10'                                                    01320000
BIT4     EQU   X'08'                                                    01340000
BIT5     EQU   X'04'                                                    01360000
BIT6     EQU   X'02'                                                    01380000
BIT7     EQU   X'01'                                                    01400000
BIT8     EQU   X'14'                                                    01420000
RESET0   EQU   X'00'                                                    01440000
RESET1   EQU   X'F7'                                                    01460000
RESET2   EQU   X'98'                                                    01480000
RESET6   EQU   X'EF'                                                    01500000
RESET10  EQU   X'0C'                                                    01520000
CONT     EQU   X'48'          THE FOLLOWING VALUES ARE USED TO TEST FOR 01540000
KSPLT    EQU   X'7F'     DELIMITERS IN THE INPUT STREAM.                01560000
EQUAL    EQU   X'7E'                                                    01580000
COMMA    EQU   X'6B'                                                    01600000
BLANKCOL EQU   X'40'                                                    01620000
LPARN    EQU   X'4D'                                                    01640000
RPARN    EQU    X'5D'                                                   01660000
PERIOD   EQU   X'4B'                                                    01680000
MINUS    EQU   X'60'                                                    01700000
DOLLAR   EQU   X'5B'                                                    01720000
POUND    EQU   X'7B'                                                    01740000
AT       EQU   X'7C'                                                    01760000
PRPARN   EQU   X'03'                                                    01780000
EQRPN    EQU   X'90'                                                    01800000
MSKE     EQU   X'42'                                                    01820000
MSKG     EQU   X'60'                                                    01840000
SLASH    EQU   X'61'                                                    01850013
*                                                                       01860000
*                             ASSEMBLER USING STATEMENTS                01880000
*                                                                       01900000
         USING IEHMVESJ,REG11                                           01920000
         USING IEHMVV,REG12                                             01940000
         USING SWITCHRD,REG7                                            01960000
*                                                                       01980000
*                                                                       02000000
*                             THIS ROUTINE SAVES REGISTERS UPON ENTRY,  02020000
*                             TESTS ENTRY CONTROL SWITCHES TO CONTROL   02040000
*                             ENTRY TO THE SCAN ROUTINE, AND INITIALIZE 02060000
*                             POINTERS TO START SCAN ADDRESS.           02080000
IEHMVESJ SAVE  (14,12),T,ESJ-9-16-65                                    02100000
        IEHPRE (14,1),TF                                                02120000
         LR    REG11,REG15              LOAD BASE REGISTER              02140000
         LA    REG7,IEHMVV90                                            02160000
        L     REG3,DSP12                                                02180000
         NI    SWITCHRD,X'7F'          RESET ERROR BIT ON SWITCHRD      02200000
         TM    SWITCHRD,BIT3           TEST FIRST ENTRY SWITCH          02220000
         BZ    KIRSCD                   IF ENTRY SWITCH IS OFF, GO TO   02240000
*                                       CLEAR CONTROL SWITCHES FOR      02260000
*                                       FIRST READ OPERATION            02280000
         TM    SWITCHRD,BIT1           TEST BYPASS SWITCH               02300000
         BO    KBYPO                    IF BYPASS SWITCH IS ON, GO TO   02320000
*                                       ROUTINE WHICH DETERMINES        02340000
*                                       WHETHER THIS CARD IS TO BE      02360000
*                                       PRINTED NOW.                    02380000
         TM    DSP5,BIT4           TEST RDCD SWITCH                     02400000
         BO    KGTCD                    IF THE READ CARD SWITCH IS ON,  02420000
*                                       GO TO READ ANOTHER CARD.        02440000
         TM    IEHMVV20+3,X'10'         PRINT CARD NOW                  02460000
         BZ    KPFOL                    NO                              02480000
         BAL   REG9,KPRNT               YES PRINT IT NOW                02500000
         OI    IEHMVV20+3,X'20'                                         02520000
         NI    IEHMVV20+3,X'EF'         INDICATE CARD HAS BEEN PRINTED  02540000
KPFOL    TM    DSP5,BIT2           TEST PARAM FOLLOW SWITCH             02560000
         BO    SCANR                    IF PARAM SWITCH IS ON, GO TO    02580000
*                                       SCAN RTN TO GET NEXT DELIMITER  02600000
         TM    DSP5,BIT1           TEST CONTINUE SWITCH                 02620000
         BO    KCONT                    IF CONTINUATION SWITCH IS ON,   02640000
*                                       GO TO SCAN CONTINUATION CARD    02660000
         LA    REG3,1(REG7)             LOAD ADDRESS OF BEGIN COLUMN    02680000
*                   THIS ROUTINE CHECKS FOR A NAME  IF NAME IS PRESENT  02700000
*                      BYPASSES NAME AND SET POINTER TO FIRST BLANK COL 02720000
*                                                                       02740000
KNAME    CLI   0(REG3),BLANKCOL                                         02760000
         BE    KOMMD                    IF DELIMITER FOUND, GO TO SET   02780000
*                                       SWITCHES TO LOOK FOR COMMAND    02800000
*                                       WORD                            02820000
         LA    REG5,DSP3                GET ADDRESS OF COL 71           02840000
         CR    REG3,REG5                IF THIS IS COL 71 AND NO        02860000
*                                       COMMAND WORD HAS BEEN FOUND,    02880000
         BE    KNOP                     GO TO SET ERROR SWITCHES        02900000
         LA    REG3,1(REG3)             OTHERWISE ADJUST POINTER TO THE 02920000
*                                       INPUT STREAM AND                02940000
         B     KNAME                    RETURN TO SEARCH AGAIN          02960000
*                   INITIALIZE SWITCHES AND INDICATORS TO RECOGNIZE     02980000
*                      COMMAND WORD IN FIRST CARD OF A GROUP            03000000
*                      RESET PARENTHESES COUNTER                        03020000
*                                                                       03040000
KOMMD    LA    REG3,1(REG3)             ADJUST PNTR TO THE INPUT STREAM 03060000
         SR    REG2,REG2                                                03080000
         STH   REG2,DSP9           RESET PARENTHESES COUNTER            03100000
         OI    DSP5,BIT5           SET COMMAND CONTROL SWITCH           03120000
         OI    SWITCHRD,BIT4           SET COMMAND BIT IN SWITCHRD      03140000
         NI    DSP10,RESET0        RESET DELIMITER INDICATOR            03160000
*                                                                       03180000
*                                                                       03200000
*                   ADJUST POINTER TO FIRST CHARACTER OF COMMAND        03220000
*                      IF NO COMMAND FOUND BEFORE COL 71 SET BYPASS BIT 03240000
         LA    REG5,DSP3           LOAD ADDRESS OF END COLUMN           03260000
KABC     CLI   0(REG3),BLANKCOL           IS COLUMN BLANK               03280000
         BNE   SCAN                     IF THIS COLUMN IS NOT BLANK,    03300000
*                                       GO TO SCAN FOR NEXT DELIMITER   03320000
         CR    REG3,REG5                  IS THIS THE END COLUMN        03340000
         BE    KNOP                     IF THIS IS END OF CARD AND NO   03360000
*                                       COMMAND WORD HAS BEEN FOUND, GO 03380000
*                                       TO SET ERROR SWITCHES           03400000
         LA    REG3,1(REG3)            IF NO, ADJUST PNTR TO NEXT COL   03420000
         B     KABC                     AND RETURN TO SCAN FOR BLANK    03440000
*                   RESET SWITCHRD CONTROLS  RESET EXIT CONTROLS        03460000
*                      SAVE LAST DELIMITER AND CLEAR DELIMITER IND      03480000
*                                                                       03500000
SCANR    NI    SWITCHRD,RESET1         RESET COMMAND BIT                03520000
SCAN     NI    SWITCHRD,RESET2         RESET ALL BITS BUT ERR,FST ENT   03540000
         NI    DSP5,BIT8           RESET ALL BITS BUT CMD CNTL SWITCH   03560000
SCANPP   MVC   DSP11(1),DSP10                                           03580000
KCPSS    NI    DSP10,RESET0                                             03600000
         NI    DSP8,RESET10        RESET EXIT CONTROL SWITCH            03620000
*                                                                       03640000
*                   THIS ROUTINE SCANS CARD UNTIL DELIMITER IS FOUND    03660000
*                      SAVES ADDRESS OF FIRST CHAR  COMPUTES LENGTH     03680000
*                      SET BIT IN EXIT CONTROL IF DELIM IS IN END COL   03700000
*                      OR BEFORE END COL                                03720000
*                                                                       03740000
KTRT     SR    REG1,REG1                                                03760000
         SR    REG2,REG2                                                03780000
         LA    REG5,DSP3           LOAD ADDRESS OF END COLUMN           03800000
         LR    REG1,REG3                                                03820000
KOMPAR   CLI   0(REG3),KSPLT            IS CHAR A DELIMITER             03840000
         BL    KFIND                    IF YES,GO TO FIND WHAT KIND OF  03860000
*                                       DELIMITER                       03880000
KOMPARA  LA    REG2,1(REG2)            ACCUMULATE LENGTH OF PARAM       03900000
*                                       BEING SCANNED                   03920000
         CR    REG3,REG5                IS THIS END COLUMN              03940000
         BE    KPART                    IF YES, GO TO SAVE LENGTH OF    03960000
*                                       PARTIAL PARAM                   03980000
         LA    REG3,1(REG3)            IF NO, ADJUST PNTR TO NEXT COL   04000000
         B     KOMPAR                   AND RETURN TO LOOK FOR DELIMITE 04020000
*                  KFIND CHECKS FOR DELIMITER OF PERIOD OR MINUS IF     04040000
*                      PRESENT RETURNS TO SCAN ROUTINE   TESTS END COL  04060000
*                      IF DELIMITER IS IN END COL SET CC2 BIT  IF BEFOR 04080000
*                      END COL SET CC1 BIT AND GOES TO TEST DELIMITER   04100000
*                      ROUTINE.                                         04120000
*                                                                       04140000
*                                                                       04160000
KFIND    CLI   0(REG3),PERIOD                                           04180000
         BE    KOMPARA                  IF DELIMITER IS A PERIOD OR A   04200000
*                                      MINUS SIGN, PUND SIGN,DOLLAR     04220000
*                                          SIGN, SLASH OR AT SIGN,      04240013
*                                          RETURN TO CONTINUE SCANNING  04260013
*                                          THE INPUT STREAM             04280013
         CLI   0(REG3),MINUS                                            04300000
         BE    KOMPARA                                                  04320000
     CLI  0(REG3),DOLLAR                                                04340000
         BE    KOMPARA                                                  04360000
      CLI   0(REG3),POUND                                               04380000
         BE    KOMPARA                                                  04400000
      CLI   0(REG3),AT                                                  04420000
         BE    KOMPARA                                                  04440000
         CLI   0(REG3),SLASH                                            04446013
         BE    KOMPARA                                                  04452013
         CR    REG3,REG5               IS THIS END COLUMN               04460000
         BNE   SETCC1                   IF NO, SET SWITCH TO INDICATE   04480000
*                                       DELIMITER FOUND                 04500000
         OI    DSP8,BIT2                SET COND CODE 2 BIT             04520000
         TM    DSP5,BIT3                IS PARTIAL PARAM SW ON          04540000
         BO    KTERBY                   IF YES, PARAM IS TOO LONG, GO   04560000
*                                       TO SET ERROR SWITCH             04580000
         B     TESTPAR                  IF NO,GO TO CHECK FOR PARTIAL   04600000
*                                       PARAM                           04620000
*                   THIS ROUTINE SETS ENTRY SWITCHES WHEN NO COMMAND    04640000
*                      WORD IS FOUND OR NO KEYWORD OR PARAMETER FOLLOWS 04660000
*                      A COMMAND WORD                                   04680000
*                                                                       04700000
KNOP     OI    SWITCHRD,BIT0     ERROR NO COMMAND OR PARAM IN CARD      04720000
         SR    REG1,REG1                                                04740000
         SR    REG2,REG2                                                04760000
KNOPAR   OI    SWITCHRD,BIT1     ERROR NO KEYWORD OR PARAM FOLLOW       04780000
*                                       COMMAND WORD. SET BYPASS SWITCH 04800000
         B     KPASS                    AND GO TO EXIT ROUTINE          04820000
*                   TESTPAR CHECKS FOR PRESENCE OF PAPTIAL PARAMETER    04840000
*                      AND CHECKS LENGTH FOR ZERO OR  GT ZERO.          04860000
*                      SETS CORRECT LENGTH BIT                          04880000
TESTPAR  TM    DSP5,BIT3                IS'PARTIAL PARAM SW ON          04900000
         BO    KPPAR                    IF YES,GOTO CHECK IF PARAM      04920000
*                                       LENGTH IS VALID                 04940000
         SR    REG4,REG4                                                04960000
         AR    REG4,REG2                                                04980000
         BZ    SETLZ                    IF RESULT OF ADDITION IS ZERO   05000000
*                                       GOTO SET LENGTH ZERO SWITCH     05020000
*                                       AND RETURN BELOW TO CHECK FOR   05040000
*                                       VALID DELIMITER.                05060000
         OI    DSP8,BIT6                SET LNG GRTR THAN ZERO BIT      05080000
*                                                                       05100000
*                                                                       05120000
*                                                                       05140000
*                   DELIM  CHECKS FOR VALID DELIMITER AND BRANCHES TO   05160000
*                      ROUTINE TO SET CONTROL SWITCHES                  05180000
*                      IF INVALID DELIMITER IS FOUND BRANCHES TO KINVAL 05200000
*                                                                       05220000
DELIM    CLI   0(REG3),EQUAL                                            05240000
         BE    KEY                      IF DELIMITER IS AN EQUAL SIGN   05260000
*                                       GO TO SET KEYWORD SWITCH        05280000
         CLI   0(REG3),COMMA                                            05300000
         BE    PARAMC                   IF DELIMITER IS A COMMA, GOTO   05320000
*                                       SET PARAMETER SWITCH            05340000
         CLI   0(REG3),LPARN                                            05360000
         BE    PARAMLP                  IF DELIMITER IS A LEFT PAREN    05380000
*                                       SET LEFT PAREN SWITCH           05400000
         CLI   0(REG3),RPARN                                            05420000
         BE    PARAMRP                  IF DELIMITER IS A RIGHT PAREN   05440000
*                                       SET RIGHT PAREN SWITCH          05460000
         CLI   0(REG3),BLANKCOL                                         05480000
         BE    PARBLANK                 IF DELIMITER IS A BLANK,        05500000
*                                       SET BLANK SWITCH                05520000
         B     KINVALD                  IF NONE OF THE ABOVE, SET ERROR 05540000
*                                       SWITCH INDICATING INVALID       05560000
*                                       DELIMITER FOUND.                05580000
*                   DECID  CHECK THE EXIT CONTROL SW AND DELIMITER      05600000
*                      INDICATOR TO SET CORRECT ENTRY SWITCHES AND      05620000
*                      INFORMATION IN SWITCHRD FOR USER PROGRAM         05640000
*                                                                       05660000
*                                                                       05680000
*                   KIRSCO IS THE FIRST ENTRY ROUTINE  WHICH CLEARS     05700000
*                      CONTROL SWITCHES TO ZERO FOR FIRST READ          05720000
*                      GOES TO READ CARD  ROUTINE                       05740000
*                                                                       05760000
KIRSCD   OI    SWITCHRD,BIT3           SET FIRST ENTRY SWITCH           05780000
         SR    REG3,REG3               *CLEAR READ ROUTINE              05800000
         ST    REG3,DSP9                SWITCH AREAS ON FIRST           05820000
         STC   REG3,DSP5                ENTRY INTO ROUTINE*             05840000
         STC   REG3,DSP8                                                05860000
*   KGTCD READS A CARD INTO INPUT AREA.  IF LAST CARD HAS BEEN   PM3343 05880018
*      READ GO TO KEOF.  IF NOT GO TO KGTCDR.                    PM3343 05900018
KGTCD    L     REG1,IEHMVV32       SYSIN DCB ADDRESS.            PM3343 05920018
         LA    REG1,0(REG1)        CLEAR HIGH ORDER BYTE.        PM3343 05940018
         MVC   57(3,REG1),SYNAD    ADDR OF SYSIN SYNAD TO DCB.   PM3343 05960018
         MVC   33(3,REG1),EODA  ADDR OF EOF ROUTINE TO SYSIN DCB PM3343 05980018
*                                                                PM3343 06000018
*         READ NEXT CARD                                         PM3343 06020018
*                                                                PM3343 06040018
         LA    REG0,DSP1                LOAD ADDRESS OF INPUT AREA      06080000
         GET   (REG1),(REG0)            READ A CARD                     06100000
         CLC   DSP1(2),EOF         IS THIS A /* ?                 19919 06103019
         BE    KEOF                YES--THEN W'VE HIT EOF AND     19919 06106019
*                                      DATA MANAGEMENT HAS        19919 06109019
*                                      NOT SENT US TO OUR         19919 06112019
*                                      EOF ROUTINE  .             19919 06115019
         TM    IEHMVV20+3,X'20'         PRINT NOW                       06120000
         BZ    KGTCDR                   NO                              06140000
         BAL   REG9,KPRNT               YES PRINT IT NOW                06160000
         B     KGTCDR                                                   06180000
*                   KGTCDR TESTS COLUMN 72 FOR BLANK AND SETS BIT FOR   06200000
*                      BLANK OR NON BLANK   TEST BYPASS BIT IF ON       06220000
*                      GO TO KBYPO IF OFF GO TO ROUTINE TO TEST ENTRY   06240000
*                      CONTROL SWITCH                                   06260000
*                                                                       06280000
KGTCDR   NI    DSP8,RESET0                                              06300000
         CLI   DSP4,BLANKCOL            IS COLUMN 72 BLANK              06320000
         BE    SET72B                   IF YES, SET END OF CARD SWITCH  06340000
         OI    DSP8,BIT5                SET 72 NB SW                    06360000
RETURN   TM    SWITCHRD,BIT1           IS BYPASS SWITCH ON              06380000
         BO    KBYPO                    IF YES, GOTO TEST IF CARD IS TO 06400000
*                                       BE PRINTED NOW                  06420000
         B     KPFOL                    GO TO TEST IF NEXT CARD SHOULD  06440000
*                                       BE READ.                        06460000
*                   PARBLANK IS ENTERED IF DELIMITER WAS A BLANK        06480000
*                      CHECKS FOR PRESENCE OF COMMAND WORD IF COMMAND   06500000
*                      ADJUST POINTER TO NEXT NON BLANK COLUMN          06520000
*                      CHECKS LENGTH IF NOT ZERO SET BYPASS SW          06540000
*                      IF ZERO AND PRECEDED BY COMMA READ NEXT          06560000
*                      CARD                                             06580000
*                                                                       06600000
PARBLANK TM    DSP5,BIT5                IS CMD CNTL SW ON               06620000
         BO    KPCMD                    IF YES, GO TO SCAN FOR NEXT     06640000
*                                       KEYWORD                         06660000
         OI    SWITCHRD,BIT6           SET PARAM BIT                    06680000
         OI    DSP10,BIT4               SET BLANK DELIM BIT             06700000
DECID    TM    DSP8,BIT2                IS DELIM IN END COLUMN          06720000
         BO    KWENT                    IF YES, GO TO SET READ CARD SW  06740000
         TM    DSP8,BIT7                IS LENGTH EQ TO ZERO            06760000
         BO    KFORZRO                  IF YES, GO TO CHECK TYPE OF     06780000
*                                       DELIMITER                       06800000
         OI    DSP5,BIT2                SET PARAM FOLLOW SW             06820000
         TM    DSP10,BIT4               IS DELIM A BLANK                06840000
         BO    KETBYP                   IF YES, SET BYPASS SWITCH       06860000
         B     KPASS                    IF NONE OF THE ABOVE, EXIT      06880000
KETBYP   OI    SWITCHRD,BIT1           SET BYPASS SWITCH                06900000
         BAL   REG9,PARAN               GO TO TEST PARAN CTR            06920000
         B     KPASS                    EXIT                            06940000
KFORZRO  SR    REG1,REG1                SET REG1 AND REG2 TO ZERO       06960000
         SR    REG2,REG2                                                06980000
         TM    DSP10,BIT4               IS DELIM A BLANK                07000000
         BO    KETRDCD                  IF YES, SET READ CARD SWITCH    07020000
         OI    DSP5,BIT2                SET PARAM FOLLOW SW             07040000
         TM    DSP10,BIT0               IS DELIM AN EQUAL SIGN          07060000
         BO    KTER                     IF YES, GO TO SET ERROR SWITCH  07080000
*                                       AND EXIT                        07100000
         TM    DSP10,BIT2               IS DELIM LEFT PAREN             07120000
         BO    KPAFOL                   IF YES, GO TO SCAN FOR NEXT     07140000
*                                       DELIMITER                       07160000
         TM    DSP10,BIT3               IS DELIM RIGHT PAREN            07180000
         BO    KPASS                    IF YES, EXIT                    07200000
         TM    DSP11,BIT3               WAS LAST DELIM A RT PAREN       07220000
         BO    KPAFOL                   IF YES, GO TO SCAN FOR NEXT     07240000
*                                       DELIMITER                       07260000
         B     KPASS                    OTHERWISE, EXIT                 07280000
KDSP     LA    REG4,DSP2               IS THIS COL 16                   07300000
         CR    REG3,REG4                                                07320000
         BE    KBYPS                    IF YES, GO TO SET BYPASS SWITCH 07340000
*                                       AND EXIT                        07360000
         TM    DSP11,EQRPN              WAS LAST DELIM AN = OR )        07380000
         BZ    KTERBY                   IF NO, SET ERROR SWITCH ANDEXIT 07400000
         B     KBYPS                    OTHERWISE, SET BYPASS SWITCH    07420000
*                                       AND EXIT                        07440000
KETRDCD  OI    DSP5,CONT                SET RDCD AND CONTINUE SW        07460000
         TM    DSP8,BIT4                IS COL 72 BLANK                 07480000
         BO    KDSP                     IF YES, RETURN TO CHECK FOR     07500000
*                                       COL 16                          07520000
         TM    DSP11,BIT1               WAS LAST DELIM A COMMA          07540000
         BO    KGTCD                    IF YES, RETURN TO READ NEXT     07560000
*                                       RECORD                          07580000
         TM    DSP11,BIT2               WAS LAST DELIM A  (             07600000
         BO    KTERBY                   IF YES, SET ERROR SWITCH AND    07620000
*                                       EXIT                            07640000
         B     KBYPS                    OTHERWISE, SET BYPASS SWITCH    07660000
*                                       AND EXIT                        07680000
KTERBY   OI    SWITCHRD,BIT1           SET BYPASS SWITCH                07700000
KTER     OI    SWITCHRD,BIT0           SET ERROR SW                     07720000
         B     KPASS                    AND EXIT                        07740000
KWENT    OI    DSP5,CONT                SET RDCD AND CONTINUE SW        07760000
         TM    DSP8,BIT4                IS COLUMN 72 BLANK              07780000
         BO    KETCTBL                  IF YES, CHECK PAREN COUNT       07800000
         TM    DSP8,BIT7                IS LENGTH EQUAL TO ZERO         07820000
         BO    KZERO                    IF YES, GO TO FIND TYPE OF      07840000
*                                       DELIMITER                       07860000
         TM    DSP10,BIT4               IS DELIM BLANK                  07880000
         BO    KETBYP                   IF YES, SET BYPASS SWITCH AND   07900000
*                                       CHECK PAREN COUNT               07920000
         B     KPASS                    OTHERWISE, EXIT                 07940000
KZERO    SR    REG1,REG1                                                07960000
         TM    DSP10,BIT0               IS DELIM EQUAL                  07980000
         BO    KTER                     IF YES, SET ERROR SWITCH AND    08000000
*                                       EXIT                            08020000
         TM    DSP10,BIT4               IS DELIM A BLANK                08040000
         BO    KETRDCD                  IF YES, SET READ CARD SWITCH    08060000
         TM    DSP10,BIT1               IS DELIM A COMMA                08080000
         BZ    KRTPR                    IF NO, CHECK FOR A RIGHT        08100000
*                                       PAREN DELIMITER                 08120000
         TM    DSP11,BIT3               WAS LAST DELIM A )              08140000
         BO    KGTCD                    IF YES, READ NEXT RECORD        08160000
         B     KPASS                    OTHERWISE, EXIT                 08180000
KRTPR    TM    DSP10,BIT3               IS DELIM A RT PAREN             08200000
         BO    KPASS                    IF YES, EXIT                    08220000
         B     KGTCD                    OTHERWISE, READ NEXT RECORD     08240000
KETCTBL  OI    SWITCHRD,BIT1           SET BYPASS SW                    08260000
         BAL   REG9,PARAN               CHECK PARAN CTR                 08280000
         TM    DSP8,BIT7                IS LENGTH EQ TO ZERO            08300000
         BO    KETLPRN                  IF YES, CHECK FOR TYPE OF       08320000
*                                       DELIMITER                       08340000
         TM    DSP10,BIT1               IS DELIM A COMMA                08360000
         BO    KTER                     IF YES, SET ERROR SWITCH AND    08380000
*                                       EXIT                            08400000
         B     KPASS                    OTHERWISE, EXIT                 08420000
KETLPRN  SR    REG1,REG1                                                08440000
         TM    DSP10,BIT3               IS DELIM A RT PAREN             08460000
         BO    KPASS                    IF YES, EXIT                    08480000
         TM    DSP10,BIT4               IS DELIM A BLANK                08500000
         BO    KETBLK                   IF YES, CHECK WHAT TYPE THE     08520000
*                                       PREVIOUS DELIMITER WAS          08540000
         B     KTER                     OTHERWISE, SET ERROR SWITCH     08560000
*                                       AND EXIT                        08580000
KETBLK   TM    DSP11,MSKG            WAS LAST DELIM A COMMA OR LT PAREN 08600000
         BZ    KPASS                    IF NO, EXIT                     08620000
         B     KTER                     OTHERWISE, SET ERROR SWITCH     08640000
*                                       AND EXIT                        08660000
SET72B   OI    DSP8,BIT4                SET COL 72 BLANK SW             08680000
         B     RETURN                   RETURN TO TEST BYPASS SWITCH    08700000
KBYPO    TM    IEHMVV20+3,X'30'         HAS THIS CARD BEEN PRINTED      08720000
         BO    KBYPO1                   IF YES, TEST FOR BLANK IN COL72 08740000
         TM    IEHMVV20+3,X'20'         SHOULD WE PRINT NOW             08760000
         BO    KBYPO1                   NO                              08780000
         BAL   REG9,KPRNT               YES  PRINT IT NOW               08800000
         OI    IEHMVV20+3,X'20'                                         08820000
         NI    IEHMVV20+3,X'EF'                                         08840000
KBYPO1   CLI   DSP4,BLANKCOL            IS COL 72 BLANK                 08860000
         BNE   KGTCD                    IF NO, READ NEXT RECORD         08880000
         NI    SWITCHRD,BIT3           RESET SWITCHRD                   08900000
         NI    DSP5,RESET0              RESET ENTRY CNTL SW             08920000
         NI    IEHMVV20+3,X'CF'         RESET PRINT SWITCH              08940000
         B     KGTCD                    RETURN TO READ NEXT RECORD      08960000
SETCC1   OI    DSP8,BIT1                SET COND CODE 1 SW              08980000
         B     TESTPAR                  RETURN TO TEST FOR PARTIAL PARM 09000000
SETLZ    OI    DSP8,BIT7                SET LENGTH ZERO SW              09020000
         B     DELIM                    RETURN TO CHECK FOR VALID       09040000
*                                       DELIMITER                       09060000
KEY      OI    SWITCHRD,BIT5           SET KEYWORD BIT                  09080000
         OI    DSP10,BIT0               SET DELIM EQ BIT                09100000
         B     DECID                    RETURN TO SET UP FOR KEYWORD    09120000
*                                       SCAN                            09140000
PARAMC   OI    SWITCHRD,BIT6           SET PARAMETER BIT                09160000
         OI    DSP10,BIT1               SET DELIM COMMA BIT             09180000
         B     DECID                    RETURN TO SET UP FOR SUB PARAM  09200000
*                                       LIST SCAN                       09220000
PARAMLP  OI    SWITCHRD,BIT6           SET PARAMETER BIT                09240000
         OI    DSP10,BIT2               SET DELIM LT PAREN BIT          09260000
         BAL   REG9,ADD                                                 09280000
         B     DECID                    RETURN TO SET UP SCAN FOR NEXT  09300000
*                                       DELIMITER                       09320000
PARAMRP  OI    SWITCHRD,PRPARN         SET PARAM AND RT PAREN BITS      09340000
         OI    DSP10,BIT3               SET DELIM RT PAREN BIT          09360000
         BAL   REG9,SUBT                                                09380000
         B     DECID                    RETURN TO SET UP SCAN FOR       09400000
*                                       NEXT DELIMITER                  09420000
PRFOL    OI    DSP5,BIT2                SET PARAM FOLLOW TO ENTRY CNTL  09440000
         B     KPASS                    EXIT                            09460000
KPRNT    LR    REG1,REG12                                               09480000
         MVI   0(REG1),BLANK                                            09500000
         MVC   1(120,REG1),0(REG1)      CLEAR PRINT BUFFER              09520000
         LA    REG2,IEHMVV90                                            09540000
         MVC   1(80,REG1),1(REG2)       MOVE CARD IMAGE TO PRINT BUFFER 09560000
         ST    REG3,124(REG12)                                          09580000
         LR    REG3,REG1                                                09600000
         LINK  EP=IEHMVESU                                              09620000
         L     REG3,124(REG12)         RESTORE REG 3                    09640000
         TM    IEHMVV20+2,ABORT         IS PERM SWITCH ON?              09660000
         BO    KABORT                                                   09680000
         BR    REG9                                                     09700000
*                                                                       09720000
KINVAL   OI    SWITCHRD,BIT0           INVALID DELIMETER USED           09740000
         LA    REG2,1(REG2)             ADJUST POINTERS TO THE          09760000
         LA    REG3,1(REG3)             INPUT STREAM                    09780000
         CLI   0(REG3),KSPLT           SET ERROR  BIT                   09800000
         BL    KINV                     IF THIS IS A DELIMITER, GOTO    09820000
*                                       ADJUST INPUT STREAM POINTER     09840000
         CR    REG3,REG5                                                09860000
         BL    KINVAL                   IF THIS IS THE END COLUMN, GOTO 09880000
*                                       SET ERROR SWITCH, INVALID       09900000
*                                       DELIMITER USED                  09920000
         TM    DSP8,BIT4                IS COLUMN 72 BLANK              09940000
         BO    KTERBY                   IF YES, SET ERROR SWITCH        09960000
*                                       AND EXIT                        09980000
         LA    REG2,1(REG2)             ADJUST PARAM LENGTH COUNTER     10000000
         B     KPTERR                   AND GOTO SAVE LENGTH OF PARTIAL 10020000
*                                       PARAM                           10040000
KCONT    LA    REG3,DSP1               ADDR. COL. 1 IN REG. 3    A37900 10060021
         CLI   0(REG3),BLANK           COL. 1 BLANK?        3    A37900 10070021
         BNE   KNOP                    IF NO, SYNTAX ERROR       A37900 10072021
         CLC   1(14,REG3),0(REG3)      NEXT 14 COL. BLANK?       A37900 10074021
         BNE   KNOP                    IF NO, SYNTAX ERROR       A37900 10076021
         LA    REG3,DSP2               ADDR. COL. 16 IN REG. 3   A37900 10078021
         CLI   0(REG3),BLANK           COL. 16 BLANK?            A37900 10078421
         BE    KNOP                    IF YES,SYNTAX ERROR       A37900 10078821
         B     SCANR                    RETURN TO SCAN FOR NEXT         10100000
*                                       DELIMITER                       10120000
KPART    TM    DSP5,BIT3                IS PARTIAL PARAM SW ON          10140000
         BO    KTERBY                   IF YES, SET ERROR SWITCH        10160000
*                                       AND EXIT                        10180000
         OI    DSP8,BIT0                SET COND CODE ZERO BIT          10200000
KPTERR   OI    DSP5,BIT3                SET PARTIAL PARAM BIT           10220000
         TM    DSP8,BIT4                IS COL 72 BLANK                 10240000
         BO    KLAST                    IF YES, SET PARAM SWITCH        10260000
         MVI   DSP7,BIT1                                                10280000
         MVC   DSP7+1(43),DSP7                                          10300000
         STC   REG2,DSP6                SAVE LENGTH OF PARTIAL PARAM    10320000
         BCTR  REG2,REG0                ADJUST LENGTH FOR MOVE          10340000
         EX    REG2,MOVEP               MOVE PARTIAL TO SAVE AREA       10360000
         OI    DSP5,BIT1                SET CONTINUE BIT                10380000
         B     KCDFL                    CONTINUATION CARD EXPECTED.     10400000
*                                       GOTO TEST IF COL 72 IS NONBLANK 10420000
KLAST    OI    SWITCHRD,BIT6            SET PARAM BIT                   10440000
         B     KETBYP                   SET BYPASS SWITCH AND EXIT      10460000
KPPAR    SR    REG4,REG4                CLEAR REG                       10480000
         IC    REG4,DSP6                PICK UP PARTIAL LENGTH          10500000
         AR    REG4,REG2                                                10520000
         C     REG4,FOUR4         IS LENGTH GREATER THAN 44             10540000
         BH    KTERBY                                                   10560000
         SR    REG4,REG4                                                10580000
         AR    REG4,REG2                 COMPLETE PARAMETER IN HOLD     10600000
         BZ    KOMPL                    IF LENGTH COUNT IN REG2 IS ZERO 10620000
*                                       PICK UP PARTIAL SWITCH          10640000
*                                       PREVIOUSLY SAVED                10660000
         SR    REG4,REG4                                                10680000
         IC    REG4,DSP6                PICK UP PARTIAL LENGTH          10700000
         LA    REG9,DSP7                ADDR OF PARTIAL HOLD AREA       10720000
         AR    REG4,REG9                                                10740000
         BCTR  REG2,REG0                ADJUST VALUE FOR MOVE           10760000
         EX    REG2,MOVPP                                               10780000
         LA    REG2,1(REG2)             ADJUST LENGTH OF PARAM          10800000
KOMPL    SR    REG4,REG4                COMPUTE LENGTH AND PLACE IN     10820000
         IC    REG4,DSP6                 REG 2                          10840000
         AR    REG2,REG4                                                10860000
         LA    REG1,DSP7                PLACE ADDR OF HOLD AREA IN      10880000
*                                                                       10900000
         NI    DSP8,RESET10                                             10920000
         OI    DSP8,MSKE                SET COND CODE 1 AND LNG GT ZERO 10940000
         MVC   DSP11(1),DSP10          SAVE LAST DELIM INDICATOR        10960000
         NI    DSP10,RESET0                                             10980000
         NI    DSP5,RESET6              RESET PARTIAL PARAM SW          11000000
         B     DELIM                    RETURN TO CHECK FOR             11020000
*                                       VALID DELIM                     11040000
KPASS    LA    REG3,1(REG3)             ADJUST PNTR TO INPUT STREAM     11060000
*                                       AND SAVE REGISTER VALUES USED   11080000
*                                       IN SCAN RTN                     11100000
KPASS1   NI    DSP5,X'EB'                                               11120000
        ST    REG1,DSP13                                                11140000
        ST    REG3,DSP12                                                11160000
         ST    REG2,DSP14                                               11180000
       IEHPOST (14),T                                                   11200000
         MVI   ESSENTRY,ZERO            SET ESS ENTRY SWITCH            11220000
         XCTL  (4,12),EP=IEHMVESS                                       11240000
KPCMD    LA    REG3,1(REG3)             ADJUST PNTR TO START OF NEXT    11260000
         CLI   0(REG3),BLANKCOL           KEYWORD OR PARAMETER AND GO   11280000
         BNE   KPCMA                    IF NOT A BLANK, GOTO TEST       11300000
*                                       FOR A COMMA                     11320000
         CR    REG5,REG3                IS THIS THE END COLUMN?         11340000
         BE    KNOPAR                   IF YES, GOTO SET ERRROR SWITCH, 11360000
*                                       NO KEYWORD FOUND, AND EXIT      11380000
         B     KPCMD                    OTHERWISE, RETURN TO SEARCH     11400000
*                                       FOR A BLANK                     11420000
KPCMA    CLI   0(REG3),COMMA              IF COMMA IS FIRST CHAR FOUND  11440000
         BE    KNOPAR                   SET ERROR SWITCH AND EXIT       11460000
         BCTR  REG3,REG0                                                11480000
         B     PRFOL                    SET PARAM FOLLOW SWITCH ANDEXIT 11500000
KSETP    OI    DSP5,BIT3                SET PARAM FOLLOW AND            11520000
         LA    REG2,1(REG2)             ADJUST PARAM LENGTH COUNTER     11540000
         B     KPTERR                   RETURN TO TEST FOR BLANK IN     11560000
*                                       COL 72                          11580000
KINV     TM    DSP5,BIT5                IF COMD CNTL SW ON ADJ          11600000
         BO    KPCMD                    ADJUST PNTR TO NEXT PARAM       11620000
         B     PRFOL                    SET PARAM FOLLOW SWITCH ANDEXIT 11640000
KCDFL    TM    DSP8,BIT5                IF COL 72 NON BLANK GET CARD    11660000
         BO    KGTCD                    RETURN TO READ NEXT RECORD      11680000
         OI    SWITCHRD,BIT0            SET ERROR  BIT IN SWITCHRD      11700000
KBYPS    OI    SWITCHRD,BIT1            SET BYPASS SW                   11720000
         B     KPASS                    EXIT                            11740000
SUBT     LH    REG4,DSP9                DELIMETER WAS A CLOSE           11760000
         BCTR  REG4,REG0                PARENTESES, SUBTRACT            11780000
         STH   REG4,DSP9                ONE FROM COUNTER                11800000
         LTR   REG4,REG4                IF PAREN COUNT IS NOT LESS THAN 11820000
         BNL   KACK                     ZERO, DO NOT SET ERROR SWITCH   11840000
         OI    SWITCHRD,BIT0            SET ERROR BIT                   11860000
KACK     BR    REG9                                                     11880000
*                                                                       11900000
*                                                                       11920000
ADD      LH    REG4,DSP9                DELIMETER WAS AN OPEN           11940000
         LA    REG4,1(REG4)             PAREN, ADD                      11960000
         STH   REG4,DSP9                ONE TO COUNTER                  11980000
         BR    REG9                                                     12000000
KPAFOL   LA    REG3,1(REG3)             ADJUST PNTR TO NEX COLUMN       12020000
         B     SCANR                    RETURN TO SCAN FOR NEXT         12040000
*                                       DELIMITER                       12060000
KINVALD  OI    SWITCHRD,BIT0            SET ERROR BIT                   12080000
         TM    DSP8,BIT2                IS DELIMETER IN END COL         12100000
         BO    KSETP                    IF YES, RETURN TO SET PARAM     12120000
*                                       FOLLOW SWITCH                   12140000
         B     KINVAL                   OTHERWISE, RETURN TO SET ERROR  12160000
*                                       SWITCH, INVALID DELIMITER USED  12180000
KEOF     NI    SWITCHRD,X'00'          RESET FIRST ENTRY                12200000
         OI    SWITCHRD,X'20'          SET END OF FILE BIT              12220000
         BAL   REG9,PARAN               GOTO TEST PAREN COUNT           12240000
          TM    DSP5,BIT1          CONTINUATION EXPECTED         A32046 12245020
          BZ    KPASS              *B IF NOT                     A32046 12250020
          OI    SWITCHRD,BIT0      INDICATE SYNTAX ERROR         A32046 12255020
         B     KPASS                    EXIT                            12260000
PARAN    SR    REG4,REG4                                                12280000
         AH    REG4,DSP9               ADD PAREN COUNT                  12300000
         BZ    OKAY                     IF PAREN COUNT ZERO, RETURN     12320000
         OI    SWITCHRD,BIT0           SET ERROR BIT                    12340000
OKAY     BR    REG9                                                     12360000
KABORT   DS    0H             ENTRY POINT TO TERMINATE A REQUEST        12380000
         OI    IEHMVV41+13,X'04'       SET RETURN CODE AT 12            12400000
         SR    REG1,REG1                                                12420000
         SR    REG2,REG2                                                12440000
         OI    SWITCHRD,BIT0           SET ERROR BIT                    12460000
         B     KPASS1                   EXIT                            12480000
*                                                                       12500000
*                             FOLLOWING INSTRUCTIONS ARE THE OBJECT     12520000
*                             OF EXECUTE STATEMENTS                     12540000
*                                                                       12560000
MOVEP    MVC   DSP7(1),0(REG1)          MOVES PARTIAL PARAM TO HOLD     12580000
*                                       AREA                            12600000
MOVPP    MVC   0(1,REG4),0(REG1)        MOVES REMAINDER OF PARAM TO     12620000
*                                       HOLD AREA                       12640000
*                                                                       12660000
*                             ASSEMBLER DC STATEMENTS AND DSECTS        12680000
*                             FOR THIS PROGRAM FOLLOW                   12700000
*                                                                       12720000
EOF      DC    CL2'/*'                                            19919 12730019
         DS    0F                                                       12740000
EODA     DC    AL3(KEOF)                                                12760000
FOUR4    DC    F'44'                                                    12780000
SYNAD    DC    AL3(KABORT)                                              12800000
         ENTRY KEOF                                                     12820000
         ENTRY  IEHMVESJ                                                12840000
*                             THE FOLLOWING DSECT DESCRIBES THE SWITCH  12860000
*                             SETTINGS USED BY THIS PROGRAM             12880000
*                                                                       12900000
         SPACE 3                                                        12920000
SWITCHRD DSECT 0F                                                       12940000
         DS    0X'80'                   ERROR INDICATOR                 12960000
         DS    0X'40'                   BYPASS SWITCH                   12980000
         DS    0X'20'                   END OF FILE INDICATOR           13000000
         DS    0X'10'                   FIRST ENTRY SWITCH              13020000
         DS    0X'08'                   COMMAND BIT                     13040000
         DS    0X'04'                   KEYWORD                         13060000
         DS    0X'02'                   PARAMETER                       13080000
         DS    1X'01'                   RIGHT PARENTHESES               13100000
DSP1     DS    CL1                COLUMN  1  OF CARD                    13120000
         DS    CL14                                                     13140000
DSP2     DS    CL1                COLUMN 16  OF CARD                    13160000
         DS    CL54                                                     13180000
DSP3     DS    CL1                COLUMN 71  OF CARD                    13200000
DSP4     DS    CL1                COLUMN 72  OF CARD                    13220000
         DS    CL8                                                      13240000
DSP5     DS    0X                  INTERNAL CONTROL SWITCHES            13260000
         DS    0X'80'                                                   13280000
         DS    0X'40'                   CONTINUED ON NEXT CARD          13300000
         DS    0X'20'                   PARAMETER FOLLOW SWITCH         13320000
         DS    0X'10'                   PARTIAL PARAMETER SWITCH        13340000
         DS    0X'08'                   READ CARD SWITCH                13360000
         DS    0X'04'                   COMMAND CONTROL SWITCH          13380000
         DS    0X'02'                                                   13400000
         DS    1X'01'                                                   13420000
DSP6     DS    1X                       LENGTH OF PARTIAL PARAMETER     13440000
DSP7     DS    CL44                     HOLD AREA FOR PARTIAL PARAM     13460000
DSP8     DS    0X'80'              CONDITION CODE  0                    13480000
         DS    0X'40'              CONDITION CODE 1                     13500000
         DS    0X'20'              CONDITION CODE  2                    13520000
         DS    0X'10'                                                   13540000
         DS    0X'08'              COLUMN 72 BLANK                      13560000
         DS    0X'04'              COLUMN 72 NON BLANK                  13580000
         DS    0X'02'              LENGTH OF PARAM GREATER THAN ZERO    13600000
         DS    1X'01'              LENGTH OF PARAM IS ZERO              13620000
DSP9     DS    1H                  PARENTHESIS COUNTER                  13640000
DSP10    DS    0X'80'              DELIMITER IS EQUAL SIGN              13660000
         DS    0X'40'              DELIMITER IS COMMA                   13680000
         DS    0X'20'              DELIMITER IS LEFT PARENTHESIS        13700000
         DS    0X'10'              DELIMITER IS RIGHT PARENTHESIS       13720000
         DS    0X'08'              DELIMITER IS BLANK                   13740000
         DS    0X'04'                   NOT USED                        13760000
         DS    0X'02'                   NOT USED                        13780000
         DS    1X'01'                   NOT USED                        13800000
DSP11    DS    0X'80'              LAST DELIM WAS EQUAL SIGN            13820000
         DS    0X'40'              LAST DELIM WAS COMMA                 13840000
         DS    0X'20'              LAST DELIM WAS LEFT PARENTHESIS      13860000
         DS    0X'10'              LAST DELIM WAS RIGHT PARENTHESIS     13880000
         DS    0X'08'                                                   13900000
         DS    0X'04'                   NOT USED                        13920000
         DS    0X'02'                   NOT USED                        13940000
         DS    1X'01'                   NOT USED                        13960000
DSP12    DS    1F                  SAVE AREA FOR START OF NEXT SCAN     13980000
DSP13    DS    1F                  POINTER TO START OF PARAM PASSED     14000000
DSP14    DS    1F                  LENGTH OF PARAMETER PASSED           14020000
         SPACE 3                                                        14040000
         IEHMVV                                                         14060000
ESSENTRY EQU   IEHMVV27+4                                               14080000
         END                                                            14100000
