         TITLE 'COMPRESSION MODULE IEZNCODE'                            00300019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00600019
*                                                                       00900019
*                                      COMPRESSION SUBROUTINE           01200019
*                                                                       01500019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01800019
*                                                                       02100019
*        STATUS                                                         02400019
*                                                                       02700019
*              CHANGE LEVEL ZERO                                        03000019
*              RELEASE NINETEEN                                         03300019
*                                                                       03600019
*        FUNCTION                                                       03900019
*                                                                       04200019
*              CHARACTER STRING COMPRESSION                             04500019
*              REPLACING SERIES OF BLANKS WITH COUNT FIELDS             04800019
*              FOR DECOMPRESSION BY IEZDCODE                            05100019
*                                                                       05400019
*              BLOCKS COMPRESSED RECORDS                                05700019
*              BY UPDATING PARAMETER AREA                               06000019
*                                                                       06300019
*              FLAGS COMPRESSED RECORD                                  06600019
*              IF IEZTYPE IS X'80'                                      06900019
*              NOT IF X'00'                                             07200019
*                                                                       07500019
*        ENTRY POINTS                                                   07800019
*                                                                       08100019
*              IEZNCODE                                                 08400019
*                                                                       08700019
*        INPUT                                                          09000019
*                                                                       09300019
*              REGISTER 13 ADDRESSES SAVE AREA                          09600019
*              REGISTER 14 ADDRESSES RETURN POINT                       09900019
*              REGISTER 1 ADDRESSES POINTER TO PARAMETER AREA           10200019
*                                                                       10500019
*        OUTPUT                                                         10800019
*                                                                       11100019
*              REGISTER 15 CONTAINS RETURN CODE                         11400019
*              OTHER REGISTERS ARE RESTORED                             11700019
*                                                                       12000019
*        EXTERNAL REFERENCES                                            12300019
*                                                                       12600019
*              READS UNCOMPRESSED RECORD                                12900019
*              ADDRESSED BY IEZUNCOM                                    13200019
*              WITH LENGTH IEZLEN                                       13500019
*                                                                       13800019
*              WRITES COMPRESSED RECORD                                 14100019
*              ADDRESSED BY IEZCOMPR                                    14400019
*              WITH LENGTH NOT EXCEEDING IEZOUT                         14700019
*                                                                       15000019
*              READS IEZUNCOM, IEZLEN, IEZCHAR AND IEZTYPE              15300019
*              UPDATES IEZCOMPR AND IEZOUT                              15600019
*              SCRATCHES IEZRES                                         15900019
*                                                                       16200019
*        NORMAL EXITS                                                   16500019
*                                                                       16800019
*              RETURN CODE ZERO MEANS TRANSLATION COMPLETED             17100019
*              FOR ONE RECORD                                           17400019
*                                                                       17700019
*              RETURN CODE FOUR MEANS END OF BLOCK TERMINATION          18000019
*              WITH NO RECORD TRANSLATED                                18300019
*                                                                       18600019
*        ABNORMAL EXITS                                                 18900019
*                                                                       19200019
*              NONE                                                     19500019
*                                                                       19800019
*        TABLES AND WORK AREAS                                          20100019
*                                                                       20400019
*              PARAMETER AREA BELOW                                     20700019
*                                                                       21000019
*        ATTRIBUTES                                                     21300019
*                                                                       21600019
*              REFRESHABLE                                              21900019
*                                                                       22200019
*        NOTES                                                          22500019
*                                                                       22800019
*              OPERATION CHARACTER-CODE INDEPENDENT                     23100019
*                                                                       23400019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 23700019
*                                                                       24000019
*                                      COMPRESSION FORMAT               24300019
*                                                                       24600019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 24900019
*                                                                       25200019
*        BLOCK                                                          25500019
*                                                                       25800019
*              COMPRESSED RECORDS      SEE BELOW                        26100019
*              END OF BLOCK MARK       2 BYTES OF ZERO                  26400019
*                                                                       26700019
*        COMPRESSED RECORD                                              27000019
*                                                                       27300019
*              SPECIAL RECORD FLAG     1 BIT                            27600019
*              COMPR RECORD LENGTH     15 BITS                          27900019
*              SEGMENTS                SEE BELOW                        28200019
*                                                                       28500019
*        SEGMENT                                                        28800019
*                                                                       29100019
*              MERGED COUNTS FLAG      1 BIT                            29400019
*              BLANK CHAR COUNT        3 (FLAG ON) OR 7 (FLAG OFF) BITS 29700019
*              NONBLANK CHAR COUNT     4 (FLAG ON) OR 8 (FLAG OFF) BITS 30000019
*              NONBLANK CHARS          1 BYTE EACH                      30300019
*                                                                       30600019
*                                      AN UNCOMPRESSED SEGMENT          30900019
*                                      IS A SERIES OF NONBLANKS         31200019
*                                      FOLLOWED BY A SERIES OF BLANKS   31500019
*                                      EITHER SERIES POSSIBLY EMPTY     31800019
*                                                                       32100019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 32400019
*                                                                       32700019
*                                      PARAMETER AREA                   33000019
*                                                                       33300019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 33600019
*                                                                       33900019
IEZPARM  DSECT                         PARAMETER AREA                   34200019
IEZUNCOM DS    A                       PTR TO UNCOMPRESSED RECORD       34500019
IEZCOMPR DS    A                       PTR TO NEXT COMPRESSED RECORD    34800019
IEZLEN   DS    H                       LENGTH OF UNCOMPRESSED RECORD    35100019
IEZOUT   DS    H                       LENGTH OF AREA FOR OUTPUT RECORD 35400019
IEZCHAR  DS    C                       CHARACTER CODE OF BLANK          35700019
IEZTYPE  DS    B                       FLAG ASSOCIATED WITH RECORD      36000019
IEZRES   DS    H                       WORK AREA                        36300019
*                                                                       36600019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 36900019
*                                                                       37200019
*                                      GENERAL REGISTERS                37500019
*                                                                       37800019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 38100019
*                                                                       38400019
BASE     EQU   11                      CODE BASE                        38700019
DATA     EQU   12                      DATA BASE                        39000019
SAVE     EQU   13                      SAVE AREA                        39300019
BACK     EQU   14                      RETURN POINT                     39600019
CODE     EQU   15                      RETURN CODE                      39900019
WORK     EQU   0                       WORK REGISTER                    40200019
PASS     EQU   1                       PARAMETER LIST                   40500019
*                                                                       40800019
UNCOM    EQU   2                       INDEX THROUGH SOURCE RECORD      41100019
COMPR    EQU   3                       INDEX THROUGH TARGET RECORD      41400019
MAXUNCOM EQU   4                       END OF SOURCE RECORD             41700019
MAXCOMPR EQU   5                       END OF TARGET RECORD             42000019
BLANKS   EQU   6                       COUNT OF BLANKS IN SEGMENT       42300019
CHARS    EQU   7                       COUNT OF CHARS IN SEGMENT        42600019
LENGTH   EQU   8                       BEGINNING OF TARGET RECORD       42900019
COUNTS   EQU   9                       BEGINNING OF SEGMENT             43200019
OUT      EQU   10                      SPACE FOR TARGET RECORDS         43500019
*                                                                       43800019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 44100019
*                                                                       44400019
*                                      BEGIN MODULE                     44700019
*                                                                       45000019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 45300019
*                                                                       45600019
IEZNCODE CSECT                         BEGIN MODULE                     45900019
*                                                                       46200019
         STM   BACK,DATA,12(SAVE)      SAVE REGISTERS                   46500002
         BALR  BASE,0                  ADDRESS CODE                     46800019
         USING *,BASE                  CODE ADDRESSABILITY              47100019
**************************************************************** Y02668 47105002
* MODULE TRACE CODE - FOR TESTING                                Y02668 47110002
         L     15,TRACEV           LOAD TRACE RTNE ADDR.         Y02668 47115002
         BALR  14,15               ENTER MOD ID IN TRACE RECORD. Y02668 47120002
TRACEV   DC    V(TRACE)            TRACE RTNE ADDR.              Y02668 47125002
         DC    C'NCOD'             MOD ID USED BY TRACE          Y02668 47130002
* TRACE RETURNS HERE.                                            Y02668 47135002
**************************************************************** Y02668 47140002
         B     N1                  BYPASS ID                     Y02668 47145002
         MODID BR=NO                                             Y02668 47150002
         DC    C'MVM'              FUNCTION ID AND               Y02668 47210002
         DC    C'01'               LEVEL # (TRACE + PATCH)       Y02668 47270002
N1       DS    0H                  BEGIN                         Y02668 47330002
         L     DATA,0(PASS)            ADDRESS DATA                     47400019
         USING IEZPARM,DATA            DATA ADDRESSABILITY              47700019
         LA    WORK,1                  CONSTANT REGISTER                48000019
         LA    CODE,2                  CONSTANT AND FLAG REGISTER       48300019
         LM    UNCOM,COMPR,IEZPARM     LOAD SOURCE AND TARGET POINTERS  48600019
         LR    MAXUNCOM,UNCOM          PREPARE SOURCE LIMIT             48900019
         AH    MAXUNCOM,IEZLEN         COMPUTE SOURCE LIMIT             49200019
         LH    OUT,IEZOUT              LOAD TARGET SPACE                49500019
         LA    MAXCOMPR,0(COMPR,OUT)   PREPARE TARGET LIMIT             49800019
         SR    MAXCOMPR,CODE           DECREMENT FOR END OF BLOCK MARK  50100019
         LR    LENGTH,COMPR            ADDRESS TARGET RECORD            50400019
         AR    COMPR,CODE              ADDRESS FIRST SEGMENT            50700019
*                                                                       51000019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 51300019
*                                                                       51600019
*                                      BEGIN SEGMENT                    51900019
*                                                                       52200019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 52500019
*                                                                       52800019
SEGMENT  DS    0H                      COMPRESS SEGMENT                 53100019
*                                                                       53400019
         LTR   CODE,CODE               IF LAST SEGMENT COMPRESSED       53700019
         BZ    FINISH                  THEN FINISH RECORD               54000019
*                                                                       54300019
         LR    COUNTS,COMPR            SAVE ADDRESS FOR COUNT FIELDS    54600019
         AR    COMPR,CODE              ADDRESS COMPRESSED CHARACTERS    54900019
         SR    CHARS,CHARS             ZERO NONBLANK CHARS COUNTED      55200019
         SR    BLANKS,BLANKS           ZERO BLANKS COUNTED              55500019
*                                                                       55800019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 56100019
*                                                                       56400019
*                                      TRANSLATE NONBLANKS              56700019
*                                                                       57000019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 57300019
*                                                                       57600019
CHAR     DS    0H                      COUNT NONBLANK CHAR              57900019
*                                                                       58200019
         CR    UNCOM,MAXUNCOM          IF SOURCE FINISHED               58500019
         BNL   RECORD                  THEN FINISH RECORD               58800019
*                                                                       59100019
         CR    COMPR,MAXCOMPR          IF TARGET LIMIT EXCEEDED         59400019
         BNL   BLOCK                   THEN FINISH BLOCK                59700019
*                                                                       60000019
         CH    CHARS,MAXCHAR           IF CHAR COUNT FULL               60300019
         BNL   COUNTED                 THEN FINISH SEGMENT              60600019
*                                                                       60900019
         CLC   0(1,UNCOM),IEZCHAR      IF SOURCE BLANK                  61200019
         BE    BLANK                   THEN COUNT BLANKS                61500019
*                                                                       61800019
         MVC   0(1,COMPR),0(UNCOM)     COMPRESS CHAR                    62100019
         AR    UNCOM,WORK              BUMP SOURCE POINTER              62400019
         AR    COMPR,WORK              BUMP TARGET POINTER              62700019
         AR    CHARS,WORK              BUMP CHAR COUNT                  63000019
*                                                                       63300019
         B     CHAR                    NEXT CHAR                        63600019
*                                                                       63900019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 64200019
*                                                                       64500019
*                                      TRANSLATE BLANKS                 64800019
*                                                                       65100019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 65400019
*                                                                       65700019
BLANK    DS    0H                      COUNT BLANK                      66000019
*                                                                       66300019
         CR    UNCOM,MAXUNCOM          IF SOURCE FINISHED               66600019
         BNL   RECORD                  THEN FINISH RECORD               66900019
*                                                                       67200019
         CH    BLANKS,MAXBLANK         IF BLANK COUNT FULL              67500019
         BNL   COUNTED                 THEN FINISH SEGMENT              67800019
*                                                                       68100019
         CLC   0(1,UNCOM),IEZCHAR      IF SOURCE NONBLANK               68400019
         BNE   COUNTED                 THEN FINISH SEGMENT              68700019
*                                                                       69000019
         AR    UNCOM,WORK              BUMP SOURCE POINTER              69300019
         AR    BLANKS,WORK             BUMP BLANK COUNT                 69600019
*                                                                       69900019
         B     BLANK                   NEXT BLANK                       70200019
*                                                                       70500019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 70800019
*                                                                       71100019
*                                      END SEGMENT                      71400019
*                                                                       71700019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 72000019
*                                                                       72300019
RECORD   DS    0H                      FINISH LAST SEGMENT IN RECORD    72600019
*                                                                       72900019
         SR    CODE,CODE               FLAG LAST SEGMENT COMPRESSED     73200019
*                                                                       73500019
COUNTED  DS    0H                      FINISH SEGMENT                   73800019
*                                                                       74100019
         STC   BLANKS,0(COUNTS)        WRITE BLANK COUNT                74400019
         STC   CHARS,1(COUNTS)         WRITE NONBLANK COUNT             74700019
*                                                                       75000019
         TM    0(COUNTS),B'11111000'   IF LEFT COUNT LARGE              75300019
         BNZ   SEGMENT                 THEN NEXT SEGMENT                75600019
*                                                                       75900019
         TM    1(COUNTS),B'11110000'   IF RIGHT COUNT LARGE             76200019
         BNZ   SEGMENT                 THEN NEXT SEGMENT                76500019
*                                                                       76800019
         MVO   1(1,COUNTS),0(1,COUNTS) MERGE COUNTS                     77100019
         OI    1(COUNTS),X'80'         FLAG MERGED COUNTS               77400019
         EX    CHARS,MOVE              SHIFT SEGMENT                    77700019
         SR    COMPR,WORK              SHIFT TARGET POINTER             78000019
*                                                                       78300019
         B     SEGMENT                 NEXT SEGMENT                     78600019
*                                                                       78900019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 79200019
*                                                                       79500019
*                                      END MODULE                       79800019
*                                                                       80100019
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 80400019
*                                                                       80700019
FINISH   DS    0H                      FINISH RECORD                    81000019
*                                                                       81300019
         XC    0(2,COMPR),0(COMPR)     END OF BLOCK IF LAST CALL        81600019
         ST    COMPR,IEZCOMPR          UPDATE TARGET POINTER            81900019
         SR    COMPR,LENGTH            COMPUTE TARGET LENGTH            82200019
         STH   COMPR,IEZRES            STORE TARGET LENGTH              82500019
         MVC   0(2,LENGTH),IEZRES      WRITE TARGET LENGTH              82800019
         OC    0(1,LENGTH),IEZTYPE     FLAG RECORD LENGTH               83100019
         SR    OUT,COMPR               COMPUTE TARGET SPACE             83400019
         STH   OUT,IEZOUT              UPDATE TARGET SPACE              83700019
*                                                                       84000019
RETURN   DS    0H                      EXIT MODULE                      84300019
*                                                                       84600019
         L     BACK,12(SAVE)           RESTORE 14                Y02668 84700002
         LM    WORK,DATA,20(SAVE)      RESTORE REGISTERS         Y02668 84900002
*                                                                       85200019
         BR    BACK                    RETURN CONTROL                   85500019
*                                                                       85800019
BLOCK    DS    0H                      FINISH BLOCK                     86100019
*                                                                       86400019
         XC    0(2,LENGTH),0(LENGTH)   MARK END OF BLOCK                86700019
         AR    CODE,CODE               RETURN END OF BLOCK CODE         87000019
*                                                                       87300019
         B     RETURN                  EXIT MODULE                      87600019
*                                                                       87900019
MAXBLANK DC    H'127'                  MAXIMUM BLANKS IN SEGMENT        88200019
MAXCHAR  DC    H'255'                  MAXIMUM NONBLANKS IN SEGMENT     88500019
MOVE     MVC   0(0,COUNTS),1(COUNTS)   EXECUTED INSTRUCTION             88800019
*                                                                       89100019
PATCH    DC    25F'0'              PATCH SPACE                   Y02668 89200002
         END                                                            89400001
*                                                                       89700019
