*DECK C$MCS1
          IDENT  C$MCS1 
          TITLE  C$MCS1 - CALCULATE CDL AND CDLP
          MACHINE ANY,I 
          COMMENT CALCULATE CDL AND CDLP
          SST 
          B1=1
          SPACE  5
* 
**        C.MCS1 - CALCULATE CDL AND CDLP 
* 
*         INPUT 
*                A0  CD ADDRESS OF AN OUTPUT CD 
*                X4  NUMBER FREE WORDS LEFT IN PARAMETER BLOCK
*                B4  MAXIMUM LENGTH OF CD 
* 
*         OUTPUT
*                X2  CDL (LENGTH OF CD IN WORDS)
*                B2  CDLP (NUMBER OF WORDS COPIED TO MCSPB) 
* 
*         DOES
*                CONVERTS DESTINATION COUNT TO BINARY 
*                CHECKS DESTINATION COUNT FOR NON NUMERIC CHARACTERS
*                CHECKS THAT DESTINATION COUNT IS NOT TOO BIG 
*                CALCULATES CDL = (19+13*DESTINATION COUNT)/10
*                CALCULATES CDLP
*                IF CDL LE FREE 
*                THEN CDLP = CDL
*                ELSE CDLP = 0
*                FINALLY, COPIES CDLP WORDS FROM CD TO MCSPB
* 
*         USES
*                A  0 1 - - - - - - 
*                X  0 1 2 - 4 - 6 - 
*                B  0 1 2 3 4 - - - 
          EJECT 
          USE    /C.MCSPB/
 MCSPB    BSS    64 
 CDADDR   BSS    1
          USE    *
          EXT    C.MCS2      CONVERSION ROUTINE 
  
*                CALCULATE CDL IN X2
  
          ENTRY  C.MCS1 
 C.MCS1   DATA   0
          SA1    A0          X1 = CD WORD 1 
          RJ     =XC.MCS2    CONVERT DESTINATION COUNT
          NG     X1,L1       X1 = -1 MEANS NON NUMERIC
          SX0    13          X0 = 13
          IX0    X0*X1       X0 = 13*DESTINATION COUNT
          SB3    X0+10       B3 = 10 + 13*DESTINATION COUNT 
          GT     B3,B4,L1    JUMP IF CURRENT > MAXIMUM
          SX0    B3+9        X0 = 19 + 13*DESTINATION COUNT 
          SX2    314632B     X2 = (1/10)*2**20
          DX2    X2*X0       X2 = (X0/10)*2**20 
          AX2    20          CDL = (19+13*DESTINATION COUNT)/10 
          EQ     L2 
  
 L1       SX2    B1          CDL = 1
  
*                CALCULATE CDLP IN B2 
  
L2        IX1    X4-X2       X1 = FREE - CDL
          SB2    B0          CDLP = 0 
          NG     X1,L3       JUMP IF RESIDUE WON"T FIT
          SB2    X2 
          BX4    X1          FREE = FREE - RESIDUE
  
*                MOVE CDLP WORDS FROM CD TO MCSPB+5 
  
 L3       SB3    B0          LOOP INDEX = 0 
          SX0    MCSPB+5
          EQ     B2,C.MCS1   CHECK FOR CDLP = 0 
 L4       SA1    A0+B3       READ FROM CD 
          BX6    X1 
          SA6    X0+B3       STORE INTO PARAMETER BLOCK 
          SB3    B3+B1       INCREMENT LOOP INDEX 
          LT     B3,B2,L4    STOP WHEN B3 = CDLP
          EQ     C.MCS1 
          END 
