1 2 C Copyright 1981-2016 ECMWF. 3 C 4 C This software is licensed under the terms of the Apache Licence 5 C Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 6 C 7 C In applying this licence, ECMWF does not waive the privileges and immunities 8 C granted to it by virtue of its status as an intergovernmental organisation 9 C nor does it submit to any jurisdiction. 10 C 11 C 12 C STATEMENT FUNCTIONS TO MANIPULATE BITS IN WORDS OF 64 BITS 13 C 14 C DATA ONES/7777777777777777B/ 15 C DATA OOOS/0B/ 16 C 17 C 1. SINGLE BIT MANIPULATIONS 18 C 19 C 1.1 SET BIT KBIT IN WORD PW 20 C 21 IBSET(KW,KBIT)=OR(KW,SHIFT(1B,KBIT)) 22 C 23 C 2. WORD MANIPULATIONS, BIT BY BIT 24 C 25 C 2.1 ARE WORDS PW1 AND PW2 EQUAL? 26 C 27 C LOGICAL NLEQAL 28 C NLEQAL(PW1,PW2)=(PW1.XOR.PW2).EQ.0B 29 C 30 C 2.2 BITWISE AND AND OR 31 C 32 IAND(K1,K2)=AND(K1,K2) 33 IOR (K1,K2)= OR(K1,K2) 34 C 35 C 2.3 BITWISE NEGATION 36 C 37 NOT(K)=COMPL(K) 38 C 39 C 2.4 SHIFT (LEFT FOR KSH POSITIVE, RIGHT FOR KSH NEGATIVE) 40 C 41 ISHFT(K,KSH)=CVMGP(SHIFTL(K,KSH),SHIFTR(K,-KSH),KSH) 42 C 43 C 3. SPECIAL PURPOSE 44 C 45 C 3.1 TAKE 4 LAST BITS OF KW, PUT THEM IN PW AT POS K*4-1 46 C 47 C SETLEV(PW,KW,K)=OR(AND(PW,SHIFT(0B.EQV.17B,K*4-4)), 48 C +SHIFT(AND(17B,KW),K*4-4)) 49 C 50 C 3.2 EXTRACT FIELD K*4-1:4 FROM PW 51 C 52 C MGTLEV(PW,K)=AND(17B,SHIFT(PW,68-K*4)) 53