]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/fq/fzoapk.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / fq / fzoapk.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.2 1996/04/18 16:10:44 mclareni
6* Incorporate changes from J.Zoll for version 3.77
7*
8* Revision 1.1.1.1 1996/03/06 10:47:14 mclareni
9* Zebra
10*
11*
12#include "zebra/pilot.h"
13#if defined(CERNLIB_FZALFA)
14 SUBROUTINE FZOAPK (LBUFCP,LBUFEP)
15
16C- Unpack the set of words LQ(LBUFC) to LQ(LBUFE-1) at most
17C- into LQ(LUPKA) to LQ(LUPKE-1) at most;
18C- service routine to FZOASC.
19
20C- Return LUPKE the adr of the first word after the unpack vector.
21C- For each word unpacked recognise the type and store 8 numbers:
22C-
23C- normal number repetition N+1 times
24C- L + 0 type L + 0 -43 to signal repeat
25C- + 1 sub-type + 1 N for N+2 numbers in all
26C- + 2 bits 26-30
27C- + 3 bits 21-25
28C- ...
29C- + 7 bits 1- 5
30
31#include "zebra/zstate.inc"
32#include "zebra/mqsysh.inc"
33C-------------- End CDE --------------
34 DIMENSION LBUFCP(9), LBUFEP(9)
35
36 EQUIVALENCE (LUPKA,IQUEST(93)), (LUPKE, IQUEST(94))
37
38
39#include "zebra/q_jbyt.inc"
40
41
42 LBUFC = LBUFCP(1)
43 LBUFE = LBUFEP(1)
44 LUPK = LUPKA
45 LUPKE = LUPKE - 10
46#if defined(CERNLIB_QDEVZE)
47 IF (NQDEVZ.NE.0) CALL VZERO (LQ(LUPK),LUPKE+8-LUPK)
48#endif
49
50 11 IWORD = LQ(LBUFC)
51 LBUFC = LBUFC + 1
52 JTYPS = 0
53 M31 = JBYT (IWORD,31,2)
54
55C-- Short cut if integer 0->9
56
57 IF (M31.NE.0) GO TO 14
58 IF (IWORD.GE.10) GO TO 14
59 JTYPE = 0
60 JTYPS = IWORD + 26
61 LQ(LUPK+7) = IWORD
62 GO TO 38
63 14 CONTINUE
64
65C-- Unpack all bytes
66
67 LQ(LUPK+2) = JBYT (IWORD,26,5)
68 LQ(LUPK+3) = JBYT (IWORD,21,5)
69 LQ(LUPK+4) = JBYT (IWORD,16,5)
70 LQ(LUPK+5) = JBYT (IWORD,11,5)
71 LQ(LUPK+6) = JBYT (IWORD, 6,5)
72 LQ(LUPK+7) = JBYT (IWORD, 1,5)
73
74C-- Type : small +ve integer
75
76 IF (M31.NE.0) GO TO 21
77 IF (LQ(LUPK+2).NE.0) GO TO 31
78 JTYPE = 5
79 DO 16 J=3,6
80 IF (LQ(LUPK+J).NE.0) GO TO 38
81 16 JTYPS = JTYPS + 1
82 GO TO 38
83
84C-- Type : small negative integer
85
86 21 IF (M31.NE.3) GO TO 31
87 IF (LQ(LUPK+2).NE.31) GO TO 31
88 JTYPE = 6
89 DO 24 J=3,6
90 IF (LQ(LUPK+J).NE.31) GO TO 38
91 24 JTYPS = JTYPS + 1
92 GO TO 38
93
94C-- Type : normal words, check short mantissa
95
96 31 JTYPE = M31 + 1
97 DO 36 J=7,4,-1
98 IF (LQ(LUPK+J).NE.0) GO TO 38
99 36 JTYPS = JTYPS + 1
100
101C-- Store Main type and sub-type, check repeat
102
103 38 LQ(LUPK) = JTYPE
104 LQ(LUPK+1) = JTYPS
105 LUPK = LUPK + 8
106 IF (LBUFC.EQ.LBUFE) GO TO 49
107 IF (LQ(LBUFC).EQ.IWORD) GO TO 61
108 39 IF (LUPK.LT.LUPKE) GO TO 11
109
110 49 LQ(LUPK) = -1
111 LUPKE = LUPK
112 RETURN
113
114C---- Check set of identical words
115
116 61 NL = LBUFE - LBUFC - 1
117 NC = 0
118 DO 63 J=1,NL
119 IF (LQ(LBUFC+J).NE.IWORD) GO TO 64
120 63 NC = NC + 1
121
122 64 IF (NC.LT.2) THEN
123 IF (JTYPE.EQ.0) GO TO 39
124 ENDIF
125 LQ(LUPK) = -43
126 LQ(LUPK+1) = NC
127 LUPKE = LUPK + 2
128 RETURN
129 END
130* ==================================================
131#include "zebra/qcardl.inc"
132#endif