Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
lbitbits.c
Go to the documentation of this file.00001 #include "f2c.h"
00002
00003 #ifndef LONGBITS
00004 #define LONGBITS 32
00005 #endif
00006
00007 integer
00008 #ifdef KR_headers
00009 lbit_bits(a, b, len) integer a, b, len;
00010 #else
00011 lbit_bits(integer a, integer b, integer len)
00012 #endif
00013 {
00014
00015
00016 unsigned long x, y;
00017
00018 x = (unsigned long) a;
00019 y = (unsigned long)-1L;
00020 x >>= b;
00021 y <<= len;
00022 return (integer)(x & ~y);
00023 }
00024
00025 integer
00026 #ifdef KR_headers
00027 lbit_cshift(a, b, len) integer a, b, len;
00028 #else
00029 lbit_cshift(integer a, integer b, integer len)
00030 #endif
00031 {
00032 unsigned long x, y, z;
00033
00034 x = (unsigned long)a;
00035 if (len <= 0) {
00036 if (len == 0)
00037 return 0;
00038 goto full_len;
00039 }
00040 if (len >= LONGBITS) {
00041 full_len:
00042 if (b >= 0) {
00043 b %= LONGBITS;
00044 return (integer)(x << b | x >> LONGBITS -b );
00045 }
00046 b = -b;
00047 b %= LONGBITS;
00048 return (integer)(x << LONGBITS - b | x >> b);
00049 }
00050 y = z = (unsigned long)-1;
00051 y <<= len;
00052 z &= ~y;
00053 y &= x;
00054 x &= z;
00055 if (b >= 0) {
00056 b %= len;
00057 return (integer)(y | z & (x << b | x >> len - b));
00058 }
00059 b = -b;
00060 b %= len;
00061 return (integer)(y | z & (x >> b | x << len - b));
00062 }