*DECK DMLPRVC 
      IDENT DMLPRVC 
*#
* *   DMLPRVC - CHARACTER PRIVACY PARAMETER ROUTINE 
*     DAVID T. CLARK                                 8/6/79 
* 
* DC  PURPOSE 
* 
*     SERVES AS A SUBROUTINE TO THE DMLPRV ROUTINE. 
*     MOVES PRIVACY KEY FROM PARAMETER 1 LOCATION TO PARAMETER
*     2 LOCATION SHIFTING WORDS TO WORD BOUNDARY IF NECESSARY.
* 
* DC  ENTRY CONDITIONS
* 
*      NONE 
* 
* DC  PARAMETERS
* 
*     PRKEY1       - CONTAINS THE PRIVACY KEY 
*     SHIFTPK      - ON EXIT, CONTAINS SHIFTED PRIVACY KEY
* 
* DC  ASSUMPTIONS 
* 
*     BOTH PARAMETER 1 AND PARAMETER 2 ARE DECLARED AS THREE
*     WORDS LONG. 
* 
* DC  EXIT CONDITIONS 
* 
*     UPON RETURN, THE SECOND PARAMETER CONTAINS THE PRIVACY KEY
*     ON A WORD BOUNDARY. 
* 
* DC  CALLING ROUTINES
* 
*     DMLPRV - INTERFACE PRIVACY ROUTINE
* 
* DC  CALLED ROUTINES 
* 
*     NONE
* 
* DC  NON-LOCAL VARIABLES 
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     DMLPRVC IS CALLED FROM DMLPRV AFTER IT IS DETERMINED THAT WE HAVE 
*     AN FDBF 1.2 VARIABLE PRIVACY PARAMETER. THE PRIVAY KEY IS 
*     PICKED UP FROM ITS STORAGE LOCATION IN THE APPLICATION PROGRAM
*     AND STORED IN ANOTHER LOCATION FOR THE INTERFACE ROUTINE. THE 
*     KEY IS SHIFTED TO A WORD BOUNDARY IF NECESSARY FOR CHARACTER
*     DATA TYPE.
*     RETURN IS MADE TO DMLPRV. 
*#
      EJECT 
************************************************************************
*                                                                      *
*                           DMLPRVC                                    *
*                                                                      *
************************************************************************
          ENTRY  DMLPRVC
          COMMENT  CHARACTER PRIVACY PARAMETER ROUTINE
* 
 DMLPRVC  EQ     *+1S17      ENTRY POINT
* 
*                            ON ENTRY THE A1 HOLD THE ADDRESS OF THE
*                            PARAMETER ADDRESS LIST 
*                            X1 HOLDS THE LENGTH, BCP, AND
*                            ADDRESS OF THE PRIVACY PARAMETER 
* 
          BX2    X1          MOVE IT TO X2 FOR COMPUTATION
          LX2    32          MOVE BCP TO LEFT-MOST
          AX2    56          REMOVE ALL BUT BCP 
* 
          BX3    X2          CONVERT BCP TO BEGINNING BIT POSITION
          LX2    1
          LX3    2
          IX2    X2+X3       BBP
          SB1    1           ONE
          SB2    B0          LOOP COUNTER 
          SB3    B1          LOOP COUNTER + 1 
          SB4    3           LOOP END 
          SB5    X2          SHIFT COUNTER-WORD ONE 
          SA4    A1+B1       X4=ADDRESS OF PARAMETER 2
          SX0    B0          ZERO MASK WORD 
          ZR     B5,AGAIN    IF BBP - 0 NO MASK NEEDED
          MX0    1           SET UP MASK TO REMOVE
          SB7    B5-B1       FOREIGN BITS ON LEFT 
          AX0    X0,B7       X0 = MASK
* 
*                            MOVE FROM PARAMETER 1 TO PARAMETER 2 
*                            SHIFTING TO WORD BOUNDS IF NECESSARY 
* 
 AGAIN    SA2    X1+B2       LOAD WORD OF PRIVACY KEY 
          BX7    -X0*X2      MASK OFF FOREIGN BITS
          SA3    X1+B3       LOAD NEXT WORD 
          BX6    X0*X3       MASK OFF EXCEPT FOR FIRST WORD 
          BX7    X7+X6       COMBINE WORDS
          LX7    X7,B5       SHIFT BITS TO PROPER ORDER 
          SA7    X4+B2       STORE PRIVACY KEY INTO PARAMETER 2 
          SB2    B2+B1       INCREMENT COUNTERS 
          SB3    B3+B1
          NE     B2,B4,AGAIN IF NOT DONE, GO AGAIN
* 
 ONWORD   EQ     DMLPRVC     RETURN 
          END 
