*DECK SM5KEY
          IDENT  SM5KEY 
          TITLE  SM5KEY -  GATHER PARAMETERS ABOUT A SORT KEY 
          COMMENT  GATHER PARAMETERS ABOUT A SORT KEY 
          SPACE  4
**        SM5KEY -  GATHER PARAMETERS ABOUT A SORT KEY
* 
*     CALLING SEQUENCE- 
*         SM5KEY(<FIRST>, <LENGTH>, <TYPE>, <ORDER> 
* 
*     GIVEN-
*         <FIRST> = INTEGER VALUE GREATER THAN ZERO.
*         <LENGTH> = INTEGER VALUE GREATER THAN ZERO. 
*         <TYPE> = QUOTED LITERAL (LEFT-JUSTIFIED, BLANK-FILLED). 
*         <ORDER> = "A" OR "D". 
* 
*     DOES- 
*         SETS NPARMS = NUMBER OF PARAMTERS.
*         CALLS S$5KEY(NPARMS, <FIRST>, <LENGTH>, <TYPE>, <ORDER>); 
  
  
          ENTRY  SM5KEY 
 SM5KEY   SUBR
          SB1    1           CONSTANT 1 
          SB7    0           COUNT OF PARAMETERS
 SM5KEY1  SA2    A1+B7       GET ADDRESS OF NEXT PARAMETER
          SB7    B7+B1       INCREMENT COUNT
          NZ     X2,SM5KEY1 
          SB7    B7-1        DO NOT COUNT ZERO-WORD TERMINATOR
  
          SB6    MAXPARMS 
          IFTHEN B7>B6
            SB7  B6 
            ENDIF.
  
          SB6    0
 SM5KEY2  SA2    A1+B6
          SB5    0
          SX5    6
* FETCH ADDRESS IN BITS 0-23
          MX4    -24
          BX0    -X4*X2      GET ADDRESS OF THE VALUE TO X0 
* FETCH BEGINNING CHARACTER POSITION IN BITS 24-27
          LX2    36 
          MX3    -4 
          BX3    -X3*X2      BCP IN X3
          IX3    X3*X5       BCP IN BITS
          SB2    X3          BCP IN B2
* FETCH LENGTH IN CHARACTERS FROM BITS 30-47
          LX2    -6 
          MX3    -18
          BX3    -X3*X2      LENGTH IN X3 
          SB4    X3          LENGTH IN B4 
  
          IFTHEN B4=B5       IF NONCHARACTER
            EQ   NONCHAR
            ENDIF.
  
          SA3    X0          GET VALUE OF PARAMETER TO X3 
          LX3    B2          LEFT JUSTIFY 
  
          SB5    8
          IFTHEN B4<B5       LESS THAN 8 CHARACTERS 
            MX5  -18
            BX3  X3*X5       MASK OUT LOWER THREE CHARACTERS
            ENDIF.
  
          BX6    X3 
          SA6    ARRY+B6     STORE VALUE IN *ARRY*
          EQ     SM5KEY3
 NONCHAR  SA3    X0          GET VALUE OF NEXT PARAMETER
          BX6    X3 
          SA6    ARRY+B6     STORE VALUE IN *ARRY*
 SM5KEY3  SB6    B6+B1       INCREMENT INDEX
          LT     B6,B7,SM5KEY2  IF MORE VALUES TO MOVE, LOOP
  
          SX6    B7 
          SA6    NPARMS 
  
          SA1    APLIST 
  
  
          CALL   S$5KEY (NPARMS, <FIRST>, <LENGTH>, <TYPE>, <ORDER>); 
          EXIT
  
 MAXPARMS EQU    100
 APLIST   VFD    42/,18/NPARMS
          VFD    42/,18/ARRY
          BSS    MAXPARMS 
 NPARMS   BSS    1
 ARRY     BSS    4
  
  
  
          END 
