*DECK,CMPRD01 
          IDENT  CMPR$01
          ENTRY  CMPR$01
*                                                                        SQUZDAA
 CMPR$01  CAP.RM
          VFD    42/0,18/CPRESS 
          VFD    42/0,18/EXPAND 
*                                                                        SQUZDAA
*#                                                                       JJJ1129
* *   PREP - GET PARAMETERS FOR CPRESS OR EXPAND    PAGE  1              AM2A077
* *   A.F.R.BROWN                                                        CY211
* 1DC PREP                                                               CY211
*                                                                        CY211
* DC  FUNCTION                                                           CY211
*                                                                        CY211
*     TO GET ALL THE PARAMETERS TO WHICH A1 POINTS ON ENTRY TO           CY211
*     CPRESS OR EXPAND, SAVE THEM IN CELLS OR REGISTERS, AND TO          CY211
*     PUT CONSTANTS 1 AND 10 IN B REGISTERS.                             CY211
*                                                                        CY211
* DC  ENTRY CONDITIONS                                                   CY211
*                                                                        CY211
*     THE EIGHT PARAMETERS, PASSED IN THE STANDARD SYMPL WAY, ARE--      CY211
*     (1) THE FWA OF THE INPUT RECORD. IT MUST BEGIN ON THE WORD         CY211
*       BOUNDARY. THIS RECORD IS TO BE COMPRESSED OR DECOMPRESSED.       CY211
*     (2) THE LENGTH OF THIS RECORD, IN CHARACTERS.                      CY211
*     (3) THE ADDRESS OF THE WORD IN WHICH THE KEY BEGINS, RELATIVE      CY211
*       TO THE FWA OF THE RECORD. THIS PARAMETER IS IGNORED IF THE       CY211
*       KEY LENGTH PARAMETER IS 0.                                       CY211
*     (4) THE CHARACTER POSITION AT WHICH THE KEY BEGINS, COUNTING       CY211
*       LEFT TO RIGHT, 0 TO 9. THIS IS ALSO IGNORED IF THE KEY LENGTH    CY211
*       PARAMETER IS 0.                                                  CY211
*     (5) THE LENGTH OF THE KEY IN CHARACTERS. THIS WILL BE 0, IF THE    CY211
*       RECORD HAS A NON-EMBEDDED KEY.                                   CY211
*     (6) THE FWA OF THE AREA INTO WHICH THE RECORD IS TO BE COMPRESSED  CY211
*       OR DECOMPRESSED. THE AREA WILL BE USED BEGINNING AT THE WORD     CY211
*       BOUNDARY.                                                        CY211
*     (7) THE LENGTH OF THAT AREA, IN CHARACTERS.                        CY211
*     (8) A WORD IN WHICH CPRESS OR EXPAND IS TO RETURN THE RESULT       CY211
*       OF ITS LABOR -- THE LENGTH OF THE OUTPUT IN CHARACTERS, IF       CY211
*       THIS WAS NOT GREATER THAN PARAMETER (7), OR ELSE A NEGATIVE      CY211
*       NUMBER TO INDICATE THAT THE PRODUCT WOULD HAVE OVERFLOWED THE    CY211
*       GIVEN AREA.                                                      CY211
*                                                                        CY211
* DC  EXIT CONDITIONS                                                    CY211
*                                                                        CY211
*     REGISTERS HAVE BEEN SET AS FOLLOWS --                              CY211
*     A4 CONTAINS THE FWA OF THE INCOMING RECORD, AND X4 CONTAINS        CY211
*       ITS FIRST WORD.                                                  CY211
*     B2 CONTAINS THE LENGTH OF THE RECORD IN CHARACTERS.                CY211
*     B7 CONTAINS THE DISTANCE IN CHARACTERS FROM THE FIRST CHARACTER    CY211
*       OF THE RECORD TO THE FIRST CHARACTER AFTER THE KEY. THIS IS 0    CY211
*       IF THE GIVEN RECORD LENGTH PARAMETER WAS 0.                      CY211
*     B4 CONTAINS THE FWA OF THE AREA INTO WHICH THE PRODUCT IS          CY211
*       TO BE STORED.                                                    CY211
*     B6 CONTAINS THE LENGTH OF THAT AREA, IN CHARACTERS. THIS NUMBER    CY211
*       HAS ALSO BEEN SAVED IN PARAMETER (8) -- IT IS NOT THE NUMBER     CY211
*       THAT WILL ULTIMATELY BE RETURNED TO THE CALLER OF EXPAND OR      CY211
*       CPRESS, BUT IT IS A CONVENIENT PLACE TO KEEP THIS.               CY211
*     B1 = 1.                                                            CY211
*     B5 = 10.                                                           CY211
*                                                                        CY211
*     RESL CONTAINS THE ADDRESS OF PARAMETER (8).                        CY211
*                                                                        CY211
* DC  ERROR CONDITIONS                                                   CY211
*                                                                        CY211
*     NONE                                                               CY211
*                                                                        CY211
* DC  CALLED ROUTINES                                                    CY211
*                                                                        CY211
*     NONE                                                               CY211
*                                                                        CY211
* DC  REGISTERS USED                                                     CY211
*                                                                        CY211
*     BESIDES THOSE NOTED UNDER ((EXIT CONDITIONS)), A1,A2,A3,A5,A6,     CY211
*     X1,X2,X3,X5,X6,X7,B3.                                              CY211
*                                                                        CY211
*#                                                                       JJJ1129
PREP      DATA   0                                                       CY211
          SB1    1                                                       CY211
          SA2    A1+B1                                                   CY211
          SA3    A2+B1                                                   CY211
          SA4    A3+B1                                                   CY211
          SA5    A4+B1                                                   CY211
          SA1    X1                                                      CY211
          SA4    X4                                                      CY211
          SB3    X4          KOC                                         CY211
          SA4    X1          FAD                                         CY211
          SA1    X2                                                      CY211
          SB2    X1          RLC                                         CY211
          SA1    X3                                                      CY211
          BX7    X1          KOW                                         CY211
          SA1    X5                                                      CY211
          SB7    X1          KYL                                         CY211
          SA1    A5+B1                                                   CY211
          SA2    A1+B1                                                   CY211
          SA3    A2+B1                                                   CY211
          SA1    X1                                                      CY211
          SB4    X1          TAD                                         CY211
          SA1    X2                                                      CY211
          SB6    X1          TLC                                         CY211
          BX6    X3                                                      CY211
          SA6    RESL                                                    CY211
          SX6    B6          TLC                                         CY211
          SA6    X3                                                      CY211
          SB5    10                                                      CY211
          ZR     B7,PREP     KYL=0                                       CY211
          LX7    1           KOW                                         CY211
          IX2    X7+X7                                                   CY211
          LX2    1                                                       CY211
          IX7    X7+X2                                                   CY211
          SX7    X7+B3       10*KOW+KOC                                  CY211
          SB7    X7+B7                                                   CY211
          EQ     PREP                                                    CY211
*                                                                        CY211
RESL      DATA   0                                                       CY211
*#                                                                       JJJ1129
* *   CPRESS - COMPRESS A RECORD                 PAGE  1                 AM2A077
* *   A.F.R.BROWN                                                        CY211
* 1DC CPRESS                                                             CY211
*                                                                        CY211
* DC  FUNCTION                                                           CY211
*                                                                        CY211
*     TO COMPRESS ALL OF A RECORD EXCEPT, IF THE KEY IS EMBEDDED,        CY211
*     THE KEY AND ANY CHARACTERS THAT PRECEDE THE KEY.                   CY211
*                                                                        CY211
* DC  ENTRY CONDITIONS                                                   CY211
*                                                                        CY211
*     THERE ARE EIGHT INCOMING PARAMETERS, LISTED AND EXPLAINED          CY211
*     ABOVE IN THE ENTRY CONDITIONS FOR SUBROUTINE PREP. THE AREA        CY211
*     INTO WHICH THE RECORD IS TO BE COMPRESSED MUST NOT OVERLAP         CY211
*     THE AREA FROM WHICH THE UNCOMPRESSED RECORD IS TO BE TAKEN.        CY211
*                                                                        CY211
* DC  EXIT CONDITIONS                                                    CY211
*                                                                        CY211
*     WHETHER COMPRESSION SUCCEEDS OR FAILS, AND WHETHER THE DESTINATION CY211
*     AREA ENDS ON A WORD BOUNDARY OR NOT, THE CHARACTERS IMMEDIATELY    CY211
*     AFTER THE END OF THE DESTINATION AREA ARE NOT ALTERED. I.E. CPRESS CY211
*     IS CAREFUL TO RESPECT THE DESTINATION AREA LENGTH EXACTLY.         CY211
*                                                                        CY211
*     IF THE EIGHTH PARAMETER IS RETURNED NEGATIVE, COMPRESSION FAILED   CY211
*     BECAUSE THE DESTINATION AREA WAS FILLED BEFORE WE HAD COME TO THE  CY211
*     END OF THE SOURCE (UNCOMPRESSED) RECORD.                           CY211
*                                                                        CY211
*     OTHERWISE, THE EIGHTH PARAMETER IS THE LENGTH OF THE COMPRESSED    CY211
*     RECORD IN CHARACTERS, PLUS 10. THE FIRST WORD IN THE DESTINATION   CY211
*     AREA CONTAINS THE 10 CHARACTERS ((STEATOPYGY)) AS A SORT OF        CY211
*     PASSWORD TO IDENTIFY THIS COMPRESSION ROUTINE (WORD FSCOMPACT IN   CY211
*     THE FSTT OF ANY FILE USING THIS COMPRESSION ROUTINE MUST CONTAIN   CY211
*     THE SAME THING.) THIS ACCOUNTS FOR THE PLUS 10. BEGINNING IN THE   CY211
*     SECOND WORD OF THE DESTINATION AREA IS THE COMPRESSED RECORD.      CY211
*     IF THE KEY IS EMBEDDED, THEN CHARACTERS FROM THE BEGINNING OF      CY211
*     THE RECORD UP TO AND INCLUDING THE LAST CHARACTER OF THE KEY       CY211
*     HAVE BEEN SIMPLY COPIED. THE REMAINING CHARACTERS HAVE BEEN        CY211
*     COMPRESSED AS FOLLOWS--                                            CY211
*     (1) A STRING OF 3 TO 18  00B CHARACTERS IS COMPRESSED INTO TWO     CY211
*     CHARACTERS 7200B+(N-3) WHERE N IS THE LENGTH OF THE STRING.        CY211
*     A STRING OF 1 OR 2 SUCH CHARACTERS IS NOT COMPRESSED, AND A        CY211
*     STRING OF MORE THAN 18 IS JUST TAKEN 18 AT A TIME.                 CY211
*     (2) A STRING OF 3 TO 18  33B CHARACTERS IS COMPRESSED INTO TWO     CY211
*     CHARACTERS 7220B+(N-3) ETC.                                        CY211
*     (3) A STRING OF 3 TO 18  55B CHARACTERS IS COMPRESSED INTO TWO     CY211
*     CHARACTERS 7240B+(N-3) ETC.                                        CY211
*     (4) A STRING OF 1 TO 16  72B CHARACTERS IS COMPRESSED (OR EXPANDED CY211
*     IF JUST 1) INTO TWO CHARACTERS 7260B+(N-1).                        CY211
*                                                                        CY211
*     B1 = 1.                                                            CY211
*                                                                        CY211
* DC  ERROR CONDITIONS                                                   CY211
*                                                                        CY211
*     NONE                                                               CY211
*                                                                        CY211
* DC  CALLED ROUTINES                                                    CY211
*                                                                        CY211
*     PREP - TO EXTRACT THE INCOMING PARAMETERS.                         CY211
*     KEY - TO COPY, UNALTERED, EVERYTHING UP TO THE END OF THE KEY.     CY211
*     CPEX - TO STORE A PARTIAL WORD AT THE END, WITHOUT DISTURBING      CY211
*       THE REST OF THE DESTINATION WORD.                                CY211
*                                                                        CY211
* DC  REGISTERS USED                                                     CY211
*                                                                        CY211
*     ALL EXCEPT A0.                                                     CY211
*                                                                        CY211
* DC  NARRATIVE                                                          CY211
*                                                                        CY211
*     FIRST CALL PREP TO GET THE PARAMETERS AND SET UP REGISTERS.        CY211
*     B6 IS THE LENGTH OF THE DESTINATION AREA IN CHARACTERS, B7         CY211
*     IS THE NUMBER OF CHARACTERS AT THE START OF THE RECORD THAT        CY211
*     ARE TO BE COPIED WITHOUT CHANGE, AND B5=10. NOW IF THE             CY211
*     DESTINATION AREA IS NOT LARGE ENOUGH TO CONTAIN ((STEATOPYGY))     CY211
*     PLUS THE COPIED CHARACTERS, PLUS ONE MORE WORD, IT IS TOO          CY211
*     SMALL TO DO ANYTHING USEFUL, AND WE GO TO THE FAILURE EXIT         CY211
*     AT CPERR. B2 IS THE LENGTH OF THE WHOLE INCOMING RECORD, IN        CY211
*     CHARACTERS, AND IF THIS IS NOT AT LEAST THE INITIAL PART           CY211
*     PLUS 10 MORE CHARACTERS, THERE IS NO POINT AT ALL IN               CY211
*     COMPRESSING AND WE GO TO FAILURE.                                  CY211
*                                                                        CY211
*     OTHERWISE, STORE ((STEATOPYGY)) IN THE FIRST WORD OF THE           CY211
*     DESTINATION AREA. WE HAVE ALREADY REDUCED B6 BY 10 TO              CY211
*     CORRESPOND TO THIS. NOW A6 INSTEAD OF B4 WILL BE USED AS THE       CY211
*     DESTINATION POINTER. REGISTERS WILL BE USED AS FOLLOWS--           CY211
*     B1, B5, B2, B6, A4, A6 AS EXPLAINED ALREADY.                       CY211
*     X4, CONTAINING THE CURRENT WORD FROM THE SOURCE, WILL ALWAYS       CY211
*       BE ROTATED SO THAT THE NEXT UNUSED CHARACTER IS  AT THE          CY211
*       LEFT END.                                                        CY211
*     B3 WILL BE THE NUMBER OF UNUSED CHARACTERS REMAINING IN X4.        CY211
*     X6 WILL CONTAIN THE CURRENT DESTINATION WORD BEING                 CY211
*       CONSTRUCTED. CHARACTERS ARE FED FROM THE RIGHT, AND THE          CY211
*       PREVIOUS CONTENTS OF THE WORD ROTATED LEFT EACH TIME.            CY211
*       UNFILLED POSITIONS ARE ALL AT THE LEFT, AND CONTAIN 00.          CY211
*     B4 WILL BE THE NUMBER OF UNUSED CHARACTERS REMAINING IN X6.        CY211
*     B7 WILL BE 1 WHEN NONE OF THE SPECIAL CHARACTERS 00B, 33B,         CY211
*       55B, OR 72B IS IN PLAY. OTHERWISE IT WILL CONTAIN 00B,           CY211
*       -33B, -55B, OR -72B TO IDENTIFY THE CURRENT SPECIAL              CY211
*       CHARACTER.                                                       CY211
*     X3 WILL BE THE COUNTER FOR THE CURRENT SERIES OF SPECIAL           CY211
*       CHARACTERS. THIS IS 1 LOW FOR 72B, OR 3 LOW FOR ANY OF           CY211
*       THE OTHER CHARACTERS, SO THAT 0 IN X3 REPRESENTS THE LENGTH      CY211
*       OF THE SHORTEST STRING THAT WE TREAT AS A STRING.                CY211
*     X0 IS A MASK (54/-0,6/0) TO EXTRACT THE NEXT CHARACTER FROM        CY211
*       THE CURRENT SOURCE WORD.                                         CY211
*     X5 IS USED TO HOLD THE LATEST CHARACTER OF SOURCE.                 CY211
*                                                                        CY211
*     WE CALL KEY TO COPY THE FIRST B7 CHARACTERS WITHOUT                CY211
*     COMPRESSION. THEN WE ARE THROUGH WITH THAT VALUE OF B7, AND        CY211
*     CAN SET IT TO 1 TO INDICATE THAT NO STRING OF SPECIAL              CY211
*     CHARACTERS IS IN PROGRESS YET.                                     CY211
*                                                                        CY211
*     THE MAIN LOOP BEGINS AT CPRESE. IF B2 IS 0, THE SOURCE RECORD      CY211
*     IS EXHAUSTED. OTHERWISE, USE MACRO ZAPPP TO FETCH THE NEXT         CY211
*     CHARACTER. IF B7 .GT. 0 THERE IS NO CURRENT SPECIAL CHARACTER,     CY211
*     SO GO TO CPRESJ, SEE IF THE NEW CHARACTER IS ANY OF THE            CY211
*     SPECIAL ONES, IF NOT USE MACRO ZIPPP TO ADD IT TO THE OUTPUT       CY211
*     RECORD, AND RETURN TO CPRESE.                                      CY211
*                                                                        CY211
*     IF THE NEW CHARACTER IN X5 IS ANY OF THE SPECIAL ONES, GO          CY211
*     SOMEWHERE BETWEEN CPRESN AND CPRESP, STORE 00B, 20B, 40B, OR       CY211
*     60B AT HOLD, SET X3 TO THE INITIAL COUNT 0 OR -2, SET B7 TO        CY211
*     MINUS THE CHARACTER VALUE, AND RETURN TO CPRESE.                   CY211
*                                                                        CY211
*     BUT IF, AT CPRESE, B7 .LQ. 0, THERE IS A CURRENT SPECIAL           CY211
*     CHARACTER STRING. IF THE NEW CHARACTER .NE. -B7, IT BREAKS         CY211
*     THE STRING, SO GO TO CPRESG TO BIND OFF THE STRING AND THEN        CY211
*     TREAT THE NEW CHARACTER AT CPRESJ, FIRST SETTING B7=1 AT CPRESQ.   CY211
*                                                                        CY211
*     IF THE NEW CHARACTER = -B7, HOWEVER, ALL WE NEED TO DO IS STEP     CY211
*     THE COUNT IN X3 AND RETURN TO CPRESE -- UNLESS THIS BRINGS         CY211
*     X3 ABOVE 15, THE LARGEST VALUE WE CAN HANDLE. IN THAT CASE,        CY211
*     SET X7=15 , AS THE COUNT TO BE RECORDED, AND GO TO CPRESK          CY211
*     TO STORE THE EQUIVALENT OF A STRING.                               CY211
*                                                                        CY211
*     AT CPRESG, WHERE WE GO WHEN THE END OF A STRING IS FOUND,          CY211
*     TRANSFER THE COUNT FROM X3 TO X7 AND GO TO CPRESK TO STORE         CY211
*     ITS EQUIVALENT. BUT IF THIS COUNT IS STILL NEGATIVE, IT            CY211
*     MEANS A STRING OF 1 OR 2 CHARACTERS 00B, 33B, OR 55B, WHICH        CY211
*     IS NOT TO BE ENCODED AFTER ALL. 1 IF X3=-2, 2 IF X3=-1.            CY211
*     THE CHARACTER ITSELF IS GOT BY COMPLEMENTING B7, THEN WE           CY211
*     CALL ZIPPP ONCE OR TWICE AND THEN ARRIVE AT CPRESQ TO              CY211
*     INITIALIZE B7=1 AND GET THE NEXT SOURCE CHARACTER.                 CY211
*                                                                        CY211
*     CPRESX IS REACHED WHEN THE SOURCE HAS BEEN EXHAUSTED. IF           CY211
*     B7 .GT. 0, THERE IS NO CURRENT STRING AND HENCE NO                 CY211
*     UNFINISHED BUSINESS, SO GO TO CPRESY. OTHERWISE WE MUST            CY211
*     FIRST STORE TWO CHARACTERS REPRESENTING THE STRING.                CY211
*     THE CODE FOR THIS IS JUST LIKE THE CODE AT CPRESG                  CY211
*     (CORRESPONDS TO THAT JUST BELOW CPRESX) AND CPRESK                 CY211
*     (CORRESPONDS TO CPRESR).                                           CY211
*                                                                        CY211
*     AT CPRESY, CALL SUBROUTINE CPEX TO STORE THE FINAL PARTIAL         CY211
*     WORD AND TO SET THE EIGHTH PARAMETER.                              CY211
*#                                                                       JJJ1129
CPRESS    DATA   0                                                       CY211
          RJ     PREP                                                    CY211
          SB6    B6-B5                                                   CY211
          SB3    B6-B7                                                   CY211
          SB3    B3-B5                                                   CY211
          NG     B3,CPERR                                                CY211
          SA1    =10LSTEATOPYGY                                          CY211
          BX6    X1                                                      CY211
          SA6    B4          NOW B4 IS FREE                              CY211
          SB3    B2-B7
          SB3    B3-B5
          NG     B3,CPERR 
          RJ     KEY                                                     CY211
          SB7    B1          CURRENT SPECIAL CHARACTER                   CY211
CPRESE    ZR     B2,CPRESX                                               CY211
*                                                                        CY211
ZAPPP     MACRO                                                          CY211
          LOCAL  WAT                                                     CY211
          LX4    6                                                       CY211
          BX5    -X0*X4                                                  CY211
          SB3    B3-B1                                                   CY211
          SB2    B2-B1                                                   CY211
          NZ     B3,WAT                                                  CY211
          SA4    A4+B1                                                   CY211
          SB3    B5                                                      CY211
WAT       BSS    0                                                       CY211
          ENDM                                                           CY211
*                                                                        CY211
          ZAPPP                                                          CY211
          GT     B7,B0,CPRESJ NO CURRENT SPECIAL                         CY211
          SX2    X5+B7                                                   CY211
          NZ     X2,CPRESG   NOT CURRENT SPECIAL                         CY211
          SX3    X3+B1                                                   CY211
          SX1    X3-16                                                   CY211
          NG     X1,CPRESE                                               CY211
          SX7    15          STRING TOO LONG                             CY211
CPRESK    SX1    1R<                                                     CY211
*                                                                        CY211
ZIPPP     MACRO  AA,CC,BB                                                CY211
          LOCAL  WIT                                                     CY211
          SB6    B6-B1                                                   CY211
          NG     B6,CC                                                   CY211
          LX6    6                                                       CY211
          BX6    X6+AA                                                   CY211
          SB4    B4-B1                                                   CY211
ZZ        IFC    NE,**BB*                                                CY211
          NZ     B4,BB                                                   CY211
ZZ        ELSE                                                           CY211
          NZ     B4,WIT                                                  CY211
ZZ        ENDIF                                                          CY211
          SA6    A6+B1                                                   CY211
          SX6    B0                                                      CY211
          SB4    B5                                                      CY211
          IFC    EQ,**BB*,1                                              CY211
WIT       BSS    0                                                       CY211
          ENDM                                                           CY211
*                                                                        CY211
          ZIPPP  X1,CPERR                                                CY211
          SA1    HOLD                                                    CY211
          IX1    X1+X7                                                   CY211
CPRESL    ZIPPP  X1,CPERR                                                CY211
CPRESQ    SB7    B1                                                      CY211
CPRESJ    ZR     X5,CPRESM0                                              CY211
          SX1    X5-1R0                                                  CY211
          ZR     X1,CPRESM1                                              CY211
          SX1    X5-1R                                                   CY211
          ZR     X1,CPRESM2                                              CY211
          SX1    X5-1R<                                                  CY211
          ZR     X1,CPRESN                                               CY211
          ZIPPP  X5,CPERR,CPRESE                                         CY211
          EQ     CPRESE                                                  CY211
*                                                                        CY211
CPRESG    SX7    X3                                                      CY211
          PL     X3,CPRESK                                               CY211
          SX1    -B7                                                     CY211
          SX3    X3+B1                                                   CY211
          ZIPPP  X1,CPERR                                                CY211
          NG     X3,CPRESQ                                               CY211
          EQ     CPRESL                                                  CY211
*                                                                        CY211
CPRESN    SX3    B0                                                      CY211
          SX7    60B                                                     CY211
          EQ     CPRESP                                                  CY211
*                                                                        CY211
CPRESM0   SX7    B0                                                      CY211
          EQ     CPRESM                                                  CY211
CPRESM1   SX7    20B                                                     CY211
          EQ     CPRESM                                                  CY211
CPRESM2   SX7    40B                                                     CY211
CPRESM    SX3    -2                                                      CY211
CPRESP    SA7    HOLD                                                    CY211
          SB7    X5                                                      CY211
          SB7    -B7                                                     CY211
          EQ     CPRESE                                                  CY211
*                                                                        CY211
HOLD      DATA   0                                                       CY211
*                                                                        CY211
CPERR     MX6    1                                                       CY211
          SA1    RESL                                                    CY211
          SA6    X1                                                      CY211
          EQ     CPRESS                                                  CY211
*                                                                        CY211
CPRESX    GT     B7,B0,CPRESY                                            CY211
          SX7    X3                                                      CY211
          PL     X3,CPRESR                                               CY211
          SX1    -B7                                                     CY211
          SX3    X3+B1                                                   CY211
          ZIPPP  X1,CPERR                                                CY211
          NG     X3,CPRESY                                               CY211
          ZIPPP  X1,CPERR                                                CY211
          EQ     CPRESY                                                  CY211
*                                                                        CY211
CPRESR    SX1    1R<                                                     CY211
          ZIPPP  X1,CPERR                                                CY211
          SA1    HOLD                                                    CY211
          IX1    X1+X7                                                   CY211
          ZIPPP  X1,CPERR                                                CY211
*                                                                        CY211
CPRESY    RJ     CPEX                                                    CY211
          EQ     CPRESS                                                  CY211
*#                                                                       JJJ1129
* *   CPEX - FINISH LAST WORD                    PAGE  1                 AM2A077
* *   A.F.R.BROWN                                                        CY211
* 1DC CPEX                                                               CY211
*                                                                        CY211
* DC  FUNCTION                                                           CY211
*                                                                        CY211
*     WHEN EITHER CPRESS OR EXPAND RUNS OUT OF INCOMING                  CY211
*     CHARACTERS, CPRESS MUST FIRST, IF THERE IS A CURRENT               CY211
*     STRING OF DUPLICATE SPECIAL CHARACTERS, TERMINATE AND              CY211
*     STORE IT. FROM THERE ON, CPRESS AND EXPAND ARE IN THE SAME         CY211
*     POSITION. THERE MAY BE A PARTIAL WORD OF OUTPUT IN X6,             CY211
*     THAT NEEDS TO BE STORED IN THE DESTINATION AREA WITHOUT            CY211
*     DISTURBING ANY EXTRA CHARACTERS AT THE RIGHT END OF THE            CY211
*     DESTINATION WORD. CPEX DOES THIS, AND STORES THE LENGTH            CY211
*     OF THE TRANSFORMED RECORD, IN CHARACTERS, IN THE EIGHTH            CY211
*     PARAMETER OF THE CALL TO CPRESS OR EXPAND.                         CY211
*                                                                        CY211
* DC  INPUT CONDITIONS                                                   CY211
*                                                                        CY211
*     X6 CONTAINS A PARTIAL WORD OF OUTPUT, FROM 0 TO 9 CHARACTERS       CY211
*       RIGHT JUSTIFIED WITH BINARY ZERO FILL.                           CY211
*     B4 IS THE NUMBER OF UNUSED CHARACTERS IN X6, FROM 1 TO 10.         CY211
*     A6+1 IS THE ADDRESS OF THE NEXT WORD IN THE DESTINATION            CY211
*       AREA.                                                            CY211
*     B6 CONTAINS THE NUMBER OF CHARACTERS REMAINING UNUSED IN THE       CY211
*       DESTINATION AREA. NOTE THAT THIS HAS ALREADY BEEN COUNTED        CY211
*       DOWN FOR THE OUTPUT CHARACTERS THAT ARE ALREADY IN X6.           CY211
*     RESL POINTS TO THE EIGHTH PARAMETER OF THE CALL TO CPRESS OR       CY211
*       EXPAND, WHICH CONTAINS THE LENGTH OF THE DESTINATION AREA IN     CY211
*       CHARACTERS.                                                      CY211
*                                                                        CY211
* DC  EXIT CONDITIONS                                                    CY211
*                                                                        CY211
*     THE PARTIAL WORD IN X6 HAS BEEN LEFT JUSTIFIED, THE UNUSED         CY211
*     CHARACTERS AT THE RIGHT HAVE BEEN FILLED WITH THE CORRESPONDING    CY211
*     CHARACTERS OF THE NEXT AVAILABLE WORD IN THE DESTINATION AREA,     CY211
*     AND THE RESULT HAS BEEN STORED IN THE NEXT AVAILABLE WORD OF       CY211
*     THE DESTINATION AREA.                                              CY211
*                                                                        CY211
*     THE EIGHTH PARAMETER, TO WHICH RESL POINTS, HAS BEEN SET TO THE    CY211
*     DIFFERENCE BETWEEN ITS PREVIOUS CONTENTS AND B6, I.E. THE ACTUAL   CY211
*     LENGTH OF THE TRANSFORMED RECORD IN CHARACTERS.                    CY211
*                                                                        CY211
* DC  ERROR CONDITIONS                                                   CY211
*                                                                        CY211
*     NONE                                                               CY211
*                                                                        CY211
* DC  CALLED ROUTINES                                                    CY211
*                                                                        CY211
*     NONE                                                               CY211
*                                                                        CY211
* DC  REGISTERS USED                                                     CY211
*                                                                        CY211
*     A1, A2, A6, X0, X1, X2, X3, X6, B4, B5                             CY211
*#                                                                       JJJ1129
CPEX      DATA   0                                                       CY211
          SX1    B4+B4                                                   CY211
          SX1    X1+B4                                                   CY211
          LX1    1                                                       CY211
          SB4    X1                                                      CY211
          LX6    X6,B4                                                   CY211
          SB5    B4-B1                                                   CY211
          MX0    1                                                       CY211
          AX0    B5,X0                                                   CY211
          LX0    B4,X0                                                   CY211
          SA1    A6+B1                                                   CY211
          BX1    X0*X1                                                   CY211
          BX6    X6+X1                                                   CY211
          SA6    A1                                                      CY211
          SA1    RESL                                                    CY211
          SA2    X1                                                      CY211
          SX3    B6                                                      CY211
          IX6    X2-X3                                                   CY211
          SA6    A2                                                      CY211
          EQ     CPEX                                                    CY211
*#                                                                       JJJ1129
* *   KEY - COPY RECORD TILL LAST KEY CHARACTER     PAGE  1              AM2A077
* *   A.F.R.BROWN                                                        CY211
* 1DC KEY                                                                CY211
*                                                                        CY211
* DC  FUNCTION                                                           CY211
*                                                                        CY211
*     TO COPY EVERYTHING IN THE RECORD UP TO THE END OF THE KEY,         CY211
*     WHETHER FOR CPRESS OR FOR EXPAND, AND TO LEAVE THE REGISTERS       CY211
*     SET UP RIGHT FOR THE COMPRESSION OR EXPANSION PROGRAM.             CY211
*                                                                        CY211
* DC  ENTRY CONDITIONS                                                   CY211
*                                                                        CY211
*     THESE ARE THE SAME AS THE EXIT CONDITIONS FROM SUBROUTINE          CY211
*     PREP, EXCEPT THAT A6+1, RATHER THAN B4, IS THE ADDRESS OF          CY211
*     THE FIRST WORD OF THE DESTINATION AREA. IN THE CASE OF             CY211
*     CPRESS, THIS WAS ACHIEVED BY PUTTING THE PASSWORD IN X6 AND        CY211
*     THEN SETTING A6=B4, REDUCING B6 BY 10 BECAUSE A WORD OF            CY211
*     DESTINATION SPACE HAS BEEN USED UP. IN THE CASE OF EXPAND,         CY211
*     WE HAVE MERELY SET A6=B4-1, FIRST TAKING CARE THAT THE WORD        CY211
*     AT THAT ADDRESS WILL NOT ACTUALLY BE ALTERED.                      CY211
*                                                                        CY211
* DC  EXIT CONDITIONS                                                    CY211
*                                                                        CY211
*     LET N BE THE NUMBER OF CHARACTERS IN THE PART OF THE RECORD        CY211
*     THAT BEGINS AT THE BEGINNING AND ENDS AT THE LAST CHARACTER        CY211
*     OF THE KEY -- OR 0 IF THE KEY IS NON-EMBEDDED.                     CY211
*     LET Q BE N/10, I.E. THE NUMBER OF FULL WORDS IN THIS AREA,         CY211
*     AND R BE N-10*Q, THE NUMBER OF CHARACTERS IN THE FINAL             CY211
*     PARTIAL WORD, OR 0 IF THERE IS NO PARTIAL WORD AT THE END.         CY211
*                                                                        CY211
*     BOTH B6 AND B2 HAVE BEEN REDUCED BY N.                             CY211
*                                                                        CY211
*     Q WORDS HAVE BEEN COPIED FROM THE SOURCE AREA TO THE               CY211
*     DESTINATION AREA.                                                  CY211
*                                                                        CY211
*     A4 IS THE ADDRESS OF THE WORD OF SOURCE NEXT AFTER THE LAST        CY211
*     COMPLETE WORD OF THE KEY PORTION. X4 CONTAINS THAT WORD,           CY211
*     ROTATED LEFT BY R CHARACTERS, SO THAT THE LEFTMOST CHARACTER       CY211
*     IS THE FIRST CHARACTER OF THE RECORD THAT FOLLOWS THE LAST         CY211
*     CHARACTER OF THE KEY.                                              CY211
*                                                                        CY211
*     A6+1 IS THE ADDRESS OF THE WORD OF DESTINATION NEXT AFTER THE      CY211
*     LAST COMPLETE WORD OF THE KEY PORTION. X6 CONTAINS THE FIRST       CY211
*     R CHARACTERS OF WHAT IS DESTINED FOR THAT WORD, I.E. THE FINAL     CY211
*     PARTIAL WORD OF KEY, IF ANY , RIGHT JUSTIFIED WITH ZERO FILL.      CY211
*                                                                        CY211
*     B3 AND B4 CONTAIN 10-R, I.E. THE NUMBER OF CHARACTERS STILL TO     CY211
*     BE TAKEN FROM X4, AND THE NUMBER OF CHARACTERS STILL TO BE         CY211
*     INSERTED IN X6 (THIS IS BETWEEN 1 AND 10).                         CY211
*                                                                        CY211
*     X0 CONTAINS THE MASK VFD 54/-0,6/0 FOR EXTRACTING INDIVIDUAL       CY211
*     CHARACTERS.                                                        CY211
*                                                                        CY211
* DC  ERROR CONDITIONS                                                   CY211
*                                                                        CY211
*     NONE                                                               CY211
*                                                                        CY211
* DC  CALLED ROUTINES                                                    CY211
*                                                                        CY211
*     NONE                                                               CY211
*                                                                        CY211
* DC  REGISTERS USED                                                     CY211
*                                                                        CY211
*     X1, B3, B7, BESIDES THOSE MENTIONED IN ((EXIT CONDITIONS)).        CY211
*#                                                                       JJJ1129
KEY       DATA   0                                                       CY211
          SX6    B0                                                      CY211
          SB4    B5                                                      CY211
          ZR     B7,KEYA                                                 CY211
KEYB      SB7    B7-B5                                                   CY211
          BX6    X4                                                      CY211
          SB6    B6-B5                                                   CY211
          SB2    B2-B5                                                   CY211
          NG     B7,KEYC                                                 CY211
          SA6    A6+B1                                                   CY211
          SA4    A4+B1                                                   CY211
          EQ     KEYB                                                    CY211
*                                                                        CY211
KEYC      SB4    -B7                                                     CY211
          SB6    B6+B4                                                   CY211
          SB2    B2+B4                                                   CY211
          SX6    B0                                                      CY211
          SX1    B7+B7                                                   CY211
          SX1    X1+B7                                                   CY211
          LX1    1                                                       CY211
          SB3    X1+60                                                   CY211
          ZR     B3,KEYA                                                 CY211
          LX4    X4,B3                                                   CY211
          SB7    B3-B1                                                   CY211
          MX0    1                                                       CY211
          AX0    X0,B7                                                   CY211
          LX0    X0,B3                                                   CY211
          BX6    X0*X4                                                   CY211
KEYA      SB3    B4                                                      CY211
          MX0    54                                                      CY211
          EQ     KEY                                                     CY211
*#                                                                       JJJ1129
* *   EXPAND - DECOMPRESS A RECORD               PAGE  1                 AM2A077
* *   A.F.R.BROWN                                                        CY211
* 1DC EXPAND                                                             CY211
*                                                                        CY211
* DC  FUNCTION                                                           CY211
*                                                                        CY211
*     TO DECOMPRESS A RECORD THAT WAS EARLIER COMPRESSED BY              CY211
*     SUBROUTINE CPRESS.                                                 CY211
*                                                                        CY211
* DC  ENTRY CONDITIONS                                                   CY211
*                                                                        CY211
*     THERE ARE EIGHT INCOMING PARAMETERS, LISTED AND EXPLAINED          CY211
*     ABOVE IN THE ENTRY CONDITIONS FOR SUBROUTINE PREP. THE AREA        CY211
*     INTO WHICH THE RECORD IS TO BE DECOMPRESSED MUST NOT OVERLAP       CY211
*     THE AREA FROM WHICH THE COMPRESSED RECORD IS TAKEN.                CY211
*                                                                        CY211
* DC  EXIT CONDITIONS                                                    CY211
*                                                                        CY211
*     B1 = 1                                                             CY211
*                                                                        CY211
*                                                                        CY211
*     WHETHER DECOMPRESSION SUCCEEDS OR FAILS, AND WHETHER THE           CY211
*     DESTINATION AREA ENDS ON A WORD BOUNDARY OR NOT, THE CHARACTERS    CY211
*     IMMEDIATELY AFTER THE END OF THE AREA ARE NOT DISTURBED.           CY211
*                                                                        CY211
*     IF THE EIGHTH PARAMETER IS RETURNED NEGATIVE, DECOMPRESSION        CY211
*     FAILED BECAUSE THE DESTINATION AREA WAS FILLED BEFORE WE HAD       CY211
*     COME TO THE END OF THE COMPRESSED RECORD. THIS IS A MORE           CY211
*     SERIOUS FAILURE FOR THE ROUTINE THAT CALLED EXPAND, THAN A         CY211
*     FAILURE REPORTED BY CPRESS WOULD BE. WE EXPECT COMPRESSION         CY211
*     TO FAIL SOMETIMES, IF THE CONTENTS OF A RECORD TO BE               CY211
*     COMPRESSED ARE UNRESTRICTED IN CHARACTER CHOICE, THOUGH            CY211
*     RESTRICTED TO A MAXIMUM LENGTH. BUT IN DECOMPRESSION, WE ARE       CY211
*     PRESUMABLY RECREATING AN ORIGINAL RECORD, WHOSE GREATEST           CY211
*     POSSIBLE LENGTH IS KNOWN, AND THE DESTINATION AREA SHOULD          CY211
*     ALLOW FOR THAT LENGTH. IF SOMETHING LONGER IS BEING                CY211
*     ((RECREATED)) THEN (1) WE DID NOT CONTROL THE LENGTH OF            CY211
*     RECORDS ENTERING THE FILE WELL ENOUGH, OR (2) THE                  CY211
*     DECOMPRESSION ROUTINE IS THE WRONG ROUTINE, OR (3) IT IS           CY211
*     NOT WORKING AS EXPECTED, OR (4) THE SO-CALLED RECORD TO BE         CY211
*     DECOMPRESSED IS GARBAGE.                                           CY211
*                                                                        CY211
*     OTHERWISE, THE EIGHTH PARAMETER IS THE LENGTH IN CHARACTERS        CY211
*     OF THE DECOMPRESSED RECORD. NOTE THAT THE ((PASSWORD)) DOES        CY211
*     NOT ENTER THE PICTURE HERE AT ALL. WE DO NOT SPEND TIME ON IT      CY211
*     IN DECOMPRESSION, BECAUSE DECOMPRESSION CANNOT INJURE THE FILE     CY211
*     ITSELF, WHEREAS A BAD COMPRESSION ROUTINE CAN.                     CY211
*                                                                        CY211
*     THE PROCEDURE OF DECOMPRESSION IS, OF COURSE, THE CONVERSE         CY211
*     OF WHAT IS DONE BY SUBROUTINE CPRESS.                              CY211
*                                                                        CY211
* DC  ERROR CONDITIONS                                                   CY211
*                                                                        CY211
*     NONE - RETURNING A NEGATIVE EIGHTH PARAMETER WILL MEAN A BAD       CY211
*     ERROR FOR THE CALLING PROGRAM, BUT FOR EXPAND THIS IS JUST         CY211
*     ROUTINE.                                                           CY211
*                                                                        CY211
* DC  CALLED ROUTINES                                                    CY211
*                                                                        CY211
*     PREP - TO EXTRACT THE INCOMING PARAMETERS.                         CY211
*     KEY - TO COPY, UNALTERED, EVERYTHING UP TO THE END OF THE KEY.     CY211
*     CPEX - TO STORE A PARTIAL WORD AT THE END, WITHOUT DISTURBING      CY211
*       THE REST OF THE DESTINATION WORD.                                CY211
*                                                                        CY211
*     FOR THE MACROS ZAPPP AND ZIPPP, SEE IN SUBROUTINE CPRESS.          CY211
*                                                                        CY211
* DC  REGISTERS USED                                                     CY211
*                                                                        CY211
*     ALL EXCEPT A0.                                                     CY211
*                                                                        CY211
* DC  NARRATIVE                                                          CY211
*                                                                        CY211
*     CALL PREP, TO GET ALL THE INCOMING PARAMETERS AND SET REGISTERS.   CY211
*     SET A6 TO 1 LESS THAN THE FWA OF THE DESTINATION AREA, MAKING      CY211
*     SURE THE WORD AT B4-1 ISNT ACTUALLY ALTERED. THIS FREES B4 TO      CY211
*     BE THE UNUSED CHARACTER COUNTER IN THE OUTPUT WORD.                CY211
*                                                                        CY211
*     DECLARE AN ERROR IF B6 .LT. B7, BECAUSE IT MEANS THE DESTINATION   CY211
*     AREA IS TOO SMALL FOR WHAT SUBROUTINE KEY IS TO COPY -- KEY HAS    CY211
*     NO PROTECTION OF ITS OWN AGAINST THIS. OTHERWISE CALL KEY TO       CY211
*     COPY THE FIRST B7 CHARACTERS WITHOUT DECOMPRESSION.                CY211
*                                                                        CY211
*     THE MAIN LOOP BEGINS AT EXPD. IF B2=0, THE SOURCE RECORD IS        CY211
*     EXHAUSTED, AND WE GO TO EXPX TO CALL CPEX, WHICH STORES THE        CY211
*     PARTIAL WORD AT THE END AND SETS THE EIGHTH PARAMETER, AND         CY211
*     THEN EXIT.                                                         CY211
*                                                                        CY211
*     IF THE SOURCE RECORD IS NOT EXHAUSTED, USE MACRO ZAPPP TO GET      CY211
*     THE NEXT CHARACTER FROM THE SOURCE INTO X5. IF IT IS NOT <         CY211
*     (72B) NO SPECIAL ACTION IS NEEDED. WE JUST USE MACRO ZIPPP         CY211
*     TO MOVE THE CHARACTER TO THE DESTINATION  AND RETURN TO EXPD.      CY211
*                                                                        CY211
*     IF A 72B IS FOUND, GO TO EXPF, AND GET THE NEXT CHARACTER.         CY211
*     THIS HAS THE FORM 16*A+B. A INDICATES THE TYPE OF CHARACTER        CY211
*     IN THE STRING TO BE GENERATED, ACCORDING TO TABLE EXPK, WHILE      CY211
*     B IS THE LENGTH-3 OR LENGTH-1 OF THE STRING. DECODE THESE,         CY211
*     THEN AT EXPL CALL ZIPPP THE RIGHT NUMBER OF TIMES TO               CY211
*     GENERATE THE STRING. THEN RETURN TO EXPD.                          CY211
*#                                                                       JJJ1129
EXPAND    DATA   0                                                       CY211
          RJ     PREP                                                    CY211
          SA1    B4-B1                                                   CY211
          BX6    X1                                                      CY211
          SA6    A1                                                      CY211
          LT     B6,B7,EXPERR                                            CY211
          RJ     KEY                                                     CY211
EXPD      ZR     B2,EXPX                                                 CY211
          ZAPPP                                                          CY211
          SX1    X5-1R<                                                  CY211
          ZR     X1,EXPF                                                 CY211
          ZIPPP  X5,EXPERR                                               CY211
          EQ     EXPD                                                    CY211
*                                                                        CY211
EXPF      ZR     B2,EXPERR                                               CY211
          ZAPPP                                                          CY211
          SX1    60B                                                     CY211
          BX7    X1*X5                                                   CY211
          IX5    X5-X7                                                   CY211
          IX1    X1-X7                                                   CY211
          ZR     X1,EXPJ                                                 CY211
          SX5    X5+2                                                    CY211
EXPJ      SB7    X5+B1                                                   CY211
          AX7    4                                                       CY211
          SA5    X7+EXPK                                                 CY211
EXPL      ZIPPP  X5,EXPERR                                               CY211
          SB7    B7-B1                                                   CY211
          NZ     B7,EXPL                                                 CY211
          EQ     EXPD                                                    CY211
*                                                                        CY211
EXPK      DATA   0                                                       CY211
          DATA   1R0                                                     CY211
          DATA   1R                                                      CY211
          DATA   1R<                                                     CY211
*                                                                        CY211
EXPX      RJ     CPEX                                                    CY211
          EQ     EXPAND                                                  CY211
*                                                                        CY211
EXPERR    MX6    1                                                       CY211
          SA1    RESL                                                    CY211
          SA6    X1                                                      CY211
          EQ     EXPAND                                                  CY211
*                                                                        CY211
*                                                                        SQUZDAA
          END                                                            SQUZDAA
