*
* $Id: uhtoc.s,v 1.1.1.1 1996/02/15 17:53:17 mclareni Exp $
*
* $Log: uhtoc.s,v $
* Revision 1.1.1.1  1996/02/15 17:53:17  mclareni
* Kernlib
*
*
UHTOC    CSECT
*
* CERN PROGLIB# M409    UHTOC           .VERSION KERNIBM  2.07  831205
* ORIG.  NOV 83,  R.MATTHEWS, CERN/DD
*
*     CALL UHTOC (VI,NH,VC,NCH)
*
#if defined(CERNLIB_QMIBMXA)
*        SPLEVEL  SET=2
UHTOC    AMODE ANY
UHTOC    RMODE ANY
#endif
R0       EQU   0
R1       EQU   1
R2       EQU   2
R3       EQU   3
R4       EQU   4
R5       EQU   5
R6       EQU   6
R7       EQU   7
R8       EQU   8
R9       EQU   9
R10      EQU   10
R11      EQU   11
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
*
         PRINT NOGEN
*
*  P R O L O G U E
*
         USING UHTOC,R15
         B     SAVEREGS
         DC    AL1(7),CL7'UHTOC'     IDENTIFIER
         DC    C'1.00'               VERSION.MODIFICATION LEVEL
SAVEREGS STM   R14,R12,12(R13)
         LR    R4,R13
         CNOP  0,4
         BAL   R13,AROUNDSA
SAVEAREA DC    A(EPILOGUE),17F'0'
         DROP  R15
         USING SAVEAREA,R13
AROUNDSA ST    R13,8(0,R4)
         ST    R4,4(0,R13)
         XC    8(4,R13),8(R13)
*
         LM    R9,R12,0(R1)   R9  -> VI;  R10 -> NH
*                             R11 -> VC;  R12 -> NCH
         L     R10,0(0,R10)   R10 := NH
         L     R12,0(0,R12)   R12 := NCH
         LTR   R12,R12        NHC=0 ?
         BZ    EPILOGUE       YES, BRANCH
         LA    R4,4           R4 := 4
         CR    R10,R4         IS NH > 4
         BNH   LOOP1          NO, BRANCH
         LR    R10,R4         DEFAULT NH=4
*
LOOP1    L     R3,0(0,R9)     R3 := NEXT INPUT WORD
         LR    R5,R10         R5 := NH
         CR    R5,R12         IS NH > NUMBER OF CHARACTERS REMAINING ?
         BNH   LOOP2          NO, BRANCH
         LR    R5,R12         R5 := NUMBER OF CHARACTERS REMAINING
*
LOOP2    SLDL  R2,8           SHIFT ONE CHARACTER INTO R2
         STC   R2,0(0,R11)    STORE IT IN VC
         LA    R11,1(0,R11)   R11 -> NEXT LOCATION IN VC
         BCT   R5,LOOP2       LOOP TO PROCESS THE NEXT CHARACTER
*
         AR    R9,R4          R9 -> NEXT INPUT WORD
         SR    R12,R10        R12 := NUMBER OF CHARACTERS REMAINING
         BP    LOOP1          LOOP TO PROCESS THE NEXT WORD
*
*  E P I L O G U E
*
EPILOGUE EQU   *
         L     R13,4(0,R13)
         LM    R14,R12,12(R13)
         MVI   12(R13),X'FF'
         BR    R14
         END
#ifdef CERNLIB_TCGEN_UHTOC
#undef CERNLIB_TCGEN_UHTOC
#endif