*COMDECK /PUTDR/
 PUT$R    TITLE     GET RL FOR RT=R PUT 
 PUT$R    CAP.RM
          OFF.RM PPT,PUT.R.OK 
          S"ERRREG" 123B
          EQ     =YERR$RM 
 PUT.R.OK BSS       0 
 .MD      IFNE      #BETA#,0
          F.RM      WSAD,X0 
          F.RM      WSAB,B3        1=LCM WSA, 0=SCM WSA 
 .MD      ELSE
          F.RM      WSA,X0
 .MD      ENDIF 
          SX3       9 
          F.RM      MRL 
          IX3       X1+X3 
          AX1       X3,B1 
          SX3       52429 
          PX1       X1
          PX3       X3
          DX1       X1*X3 
          AX1       18             MRL/10 CORRECT TO ABOUT 524K CHAR. 
          IX1       X1+X0 
          SAVE
          SB6       B5             SAVE RETURN ADDRESS
          SB5       B0
 .MD      IFNE      #BETA#,0
          ZR        B3,SCM1        IF WSA IN SCM
          RX3       X0             FIRST WORD (LCM) 
          EQ        NXT1
          SPACE     1 
 SCM1     BSS       0 
 .MD      ENDIF 
          SA3       X0             FIRST WORD (SCM) 
 .MD      IFNE      #BETA#,0
 NXT1     BSS       0 
 .MD      ENDIF 
 TA       SET       6 
 TB       SET       4 
 TC       SET       7 
 TD       SET       3 
 TE       SET       5 
 HERE     SET       0 
 STOPAT   SET       1 
 BT       SET       5 
 SCR$SQ   BSS       0 
* 
*     RECORD MARK SCAN
* 
*     INPUT --- 
*          B3 - BEGINNING OF RECORD 
*         A3=B3 
*         X3 - FIRST WORD OF RECORD 
*          B4 - END OF RECORD 
*         B5 - BBT
*          B6 - RETURN ADDRESS
*     USES ---
*          X023457
*          A34
*          B23456 
*     OUTPUT ---
*          X2 - NO. OF CHARACTERS FOUND 
*          X4 LT 0 IFF NO RMK FOUND 
 SCANRC   BSS    0                 ENTRY IF BCC KNOWN TO BE 0 
          F.RM      RMK,TB,X.TA    SAY RMK IS]
          BX.TB    X.TA            SET UP 10H]]]]]]]]]] 
          LX.TA    6
          BX.TB    X.TA+X.TB
          BX.TA    X.TB 
          LX.TB    12 
          BX.TA    X.TA+X.TB
          LX.TB    12 
          BX.TB    X.TA+X.TB
          LX.TA    36 
          BX.TA    X.TA+X.TB
* THE ABOVE ASSUMES 6-BIT CHAR. 
  
          BX2       X.HERE         SAVE FOR COMPUTATION LATER 
          SA.TB    AAAAA           MAGIC NUMBER 
          EQ       RLOOP
 RSHTCUT  BSS    0
          MX.TC     59
          IX.HERE   X.HERE-X.TC    INCREMENT WORD POINTER 
 .MD      IFNE      #BETA#,0
          ZR        B3,SCM2        IF WORD IS IN SCM
          RX.TD     X.HERE         LOAD NEXT WORD FROM LCM
          EQ        NXT2
          SPACE     1 
 SCM2     BSS       0 
 .MD      ENDIF 
          SA.TD     X.HERE
 .MD      IFNE      #BETA#,0
 NXT2     BSS       0 
 .MD      ENDIF 
          IX.TC     X.HERE-X.STOPAT 
          ZR        X.TC,RGOREAD   IF SCAN COMPLETE 
 RLOOP    BSS      0               NEXT 4 INST. WORK BY MAGIC...
          BX.TC  X.TD-X.TA
          IX.TE     X.TC-X.TB 
          BX.TE     -X.TE-X.TC
          BX.TE    X.TE*X.TB
          ZR       X.TE,RSHTCUT    TAKE A SHORTCUT IF NO ]
          IX.TB     X.HERE-X2      NUMBER OF WORDS SCANNED
          IX.TE  X.TB+X.TB
          LX.TB  3
          IX2    X.TE+X.TB         *10
          MX.TE    54 
          BX.TC  -X.TE*X.TA        GET RMK
          LX.TD    6               GET CHAR OF LAST WORD
 MRLOOP   BSS      0               SEARCH WORD FOR RMK
          BX.TB    -X.TE*X.TD 
          LX.TD    6
          IX.TB  X.TB-X.TC
          SB.BT  B.BT+B1           COUNT UP BCC 
          NZ       X.TB,MRLOOP     JUMB IF NOT RMK
  
          SX3       X2+B.BT        RECORD LENGTH
          EQ        RRETN 
  
 RGOREAD  BSS 
          MX3       1              RMK NOT FOUND (FORCE 143 ERROR)
 RRETN    BSS       0 
          SB5       B6             RESTORE RETURN ADDRESS 
          RESTORE 
          MX5       0 
          JP        B5
* END /PUTDR/ 
