* * $Id: cdupck.F,v 1.1.1.1 1996/02/28 16:24:36 mclareni Exp $ * * $Log: cdupck.F,v $ * Revision 1.1.1.1 1996/02/28 16:24:36 mclareni * Hepdb, cdlib, etc * * #include "hepdb/pilot.h" SUBROUTINE CDUPCK (IAIN, LIN, LOU, LAUX, LBITL, IAOU) * ===================================================== * ************************************************************************ * * * SUBR. CDUPCK (IAIN, LIN, LOU*, LAUX, LBITL, IAOU*) * * * * Uncompresses data from LBITL to 32 bit size * * * * Arguments : * * * * IAIN Input array * * LIN Length of the input array * * LOU Length of the output array * * LAUX Number of words exceeding the length LBITL and therefore* * are stored in 32 bits with locations given * * LBITL Number of bits to be used for storing * * IAOU Output array * * * * Called by CDUCMP * * * ************************************************************************ * DIMENSION IAIN(LIN), IAOU(LIN) LOGICAL AUXI, AUXIL #include "zebra/q_jbit.inc" * Ignoring t=pass #include "zebra/q_sbyt.inc" * Ignoring t=pass * * ------------------------------------------------------------------ * CALL VZERO (IAOU, LOU) * AUXI = LAUX.GT.0 * LAUX = LIN - LAUX + 1 IN = 1 IB = 1 IO = 1 10 CONTINUE AUXIL = (AUXI.AND.(IAIN(LAUX).EQ.IO)) IF (AUXIL) THEN LAUX = LAUX + 1 IAOU(IO) = IAIN(LAUX) LAUX = LAUX + 1 ENDIF AUXIL = .NOT.AUXIL IBA = IB + LBITL IF (IBA.LE.32) THEN IF (AUXIL.AND.LBITL.GT.0) IAOU(IO) = JBYT (IAIN(IN), IB, LBITL) IB = IBA ELSE LBIT1 = 32 - IB + 1 IF (AUXIL.AND.LBIT1.GT.0) IAOU(IO) = JBYT (IAIN(IN), IB, LBIT1) IB = IBA - 32 IN = IN + 1 IF (AUXIL.AND.IB.GT.1) + IAOU(IO) = MSBYT (IAIN(IN), IAOU(IO), LBIT1+1, IB-1) ENDIF IF (IO.LT.LOU) THEN IO = IO + 1 GO TO 10 ENDIF * END CDUPCK END