#include "f2c.h" #ifndef LONGBITS #define LONGBITS 32 #endif #ifndef LONG8BITS #define LONG8BITS (2*LONGBITS) #endif integer qbit_bits(longint a, integer b, integer len) { /* Assume 2's complement arithmetic */ ulongint x, y; x = (ulongint) a; y = (ulongint)-1L; x >>= b; y <<= len; return (longint)(x & y); } longint qbit_cshift(longint a, integer b, integer len) { ulongint x, y, z; x = (ulongint)a; if (len <= 0) { if (len == 0) return 0; goto full_len; } if (len >= LONG8BITS) { full_len: if (b >= 0) { b %= LONG8BITS; return (longint)(x << b | x >> LONG8BITS - b ); } b = -b; b %= LONG8BITS; return (longint)(x << LONG8BITS - b | x >> b); } y = z = (unsigned long)-1; y <<= len; z &= ~y; y &= x; x &= z; if (b >= 0) { b %= len; return (longint)(y | z & (x << b | x >> len - b)); } b = -b; b %= len; return (longint)(y | z & (x >> b | x << len - b)); }