diff --git a/femtolisp/builtins.c b/femtolisp/builtins.c index 8c1656f..8ac122e 100644 --- a/femtolisp/builtins.c +++ b/femtolisp/builtins.c @@ -411,7 +411,7 @@ static value_t fl_rand(value_t *args, u_int32_t nargs) static value_t fl_rand32(value_t *args, u_int32_t nargs) { (void)args; (void)nargs; - ulong r = random(); + uint32_t r = random(); #ifdef BITS64 return fixnum(r); #else diff --git a/femtolisp/cvalues.c b/femtolisp/cvalues.c index a2f5a4d..d8973fa 100644 --- a/femtolisp/cvalues.c +++ b/femtolisp/cvalues.c @@ -651,7 +651,7 @@ value_t cvalue_typeof(value_t *args, u_int32_t nargs) return cv_type((cvalue_t*)ptr(args[0])); } -value_t cvalue_relocate(value_t v) +static value_t cvalue_relocate(value_t v) { size_t nw; cvalue_t *cv = (cvalue_t*)ptr(v); @@ -840,7 +840,7 @@ static value_t cvalue_array_aref(value_t *args) { char *data; ulong_t index; fltype_t *eltype = cv_class((cvalue_t*)ptr(args[0]))->eltype; - value_t el; + value_t el = 0; numerictype_t nt = eltype->numtype; if (nt >= T_INT32) el = cvalue(eltype, eltype->size); @@ -885,7 +885,7 @@ value_t fl_builtin(value_t *args, u_int32_t nargs) symbol_t *name = tosymbol(args[0], "builtin"); cvalue_t *cv; if (ismanaged(args[0]) || (cv=name->dlcache) == NULL) { - lerror(ArgError, "builtin: function not found"); + lerrorf(ArgError, "builtin: function %s not found", name->name); } return tagptr(cv, TAG_CVALUE); } diff --git a/femtolisp/equalhash.c b/femtolisp/equalhash.c index f51de7c..70fb03d 100644 --- a/femtolisp/equalhash.c +++ b/femtolisp/equalhash.c @@ -7,7 +7,10 @@ #include "llt.h" #include "flisp.h" +#include "equalhash.h" #include "htable.inc" -HTIMPL(equalhash, hash_lispvalue, equal_lispvalue) +#define _equal_lispvalue_(x,y) equal_lispvalue((value_t)(x),(value_t)(y)) + +HTIMPL(equalhash, hash_lispvalue, _equal_lispvalue_) diff --git a/femtolisp/flisp.c b/femtolisp/flisp.c index d937cd1..5938716 100644 --- a/femtolisp/flisp.c +++ b/femtolisp/flisp.c @@ -393,7 +393,7 @@ value_t alloc_vector(size_t n, int init) // print ---------------------------------------------------------------------- static int isnumtok(char *tok, value_t *pval); -static int symchar(char c); +static inline int symchar(char c); #include "print.c" @@ -593,7 +593,7 @@ void gc(int mustgrow) tospace = temp; if (grew) { heapsize*=2; - temp = bitvector_resize(consflags, heapsize/sizeof(cons_t), 1); + temp = bitvector_resize(consflags, 0, heapsize/sizeof(cons_t), 1); if (temp == NULL) fl_raise(memory_exception_value); consflags = (uint32_t*)temp; @@ -936,7 +936,7 @@ static value_t apply_cl(uint32_t nargs) VM_APPLY_LABELS; uint32_t top_frame = curr_frame; // frame variables - uint32_t n, captured; + uint32_t n=0, captured; uint32_t bp; const uint8_t *ip; fixnum_t s, hi; diff --git a/femtolisp/print.c b/femtolisp/print.c index 7ef8dab..1492d6d 100644 --- a/femtolisp/print.c +++ b/femtolisp/print.c @@ -489,6 +489,7 @@ static void print_string(ios_t *f, char *str, size_t sz) char buf[512]; size_t i = 0; uint8_t c; + static char hexdig[] = "0123456789abcdef"; outc('"', f); if (!u8_isvalid(str, sz)) { @@ -501,8 +502,11 @@ static void print_string(ios_t *f, char *str, size_t sz) outsn("\\\"", f, 2); else if (c >= 32 && c < 0x7f) outc(c, f); - else - HPOS += ios_printf(f, "\\x%02x", c); + else { + outsn("\\x", f, 2); + outc(hexdig[c>>4], f); + outc(hexdig[c&0xf], f); + } } } else { @@ -709,10 +713,14 @@ static void cvalue_print(ios_t *f, value_t v) (unsigned long)(builtin_t)fptr); } else { - if (print_princ) + if (print_princ) { outs(symbol_name(label), f); - else - HPOS += ios_printf(f, "#fn(%s)", symbol_name(label)); + } + else { + outsn("#fn(", f, 4); + outs(symbol_name(label), f); + outc(')', f); + } } } else if (cv_class(cv)->vtable != NULL && diff --git a/femtolisp/string.c b/femtolisp/string.c index 916a3e0..a3e674c 100644 --- a/femtolisp/string.c +++ b/femtolisp/string.c @@ -339,9 +339,9 @@ value_t fl_string_dec(value_t *args, u_int32_t nargs) return size_wrap(i); } -static ulong get_radix_arg(value_t arg, char *fname) +static unsigned long get_radix_arg(value_t arg, char *fname) { - ulong radix = toulong(arg, fname); + unsigned long radix = toulong(arg, fname); if (radix < 2 || radix > 36) lerrorf(ArgError, "%s: invalid radix", fname); return radix; @@ -362,7 +362,7 @@ value_t fl_numbertostring(value_t *args, u_int32_t nargs) num = -num; neg = 1; } - ulong radix = 10; + unsigned long radix = 10; if (nargs == 2) radix = get_radix_arg(args[1], "number->string"); char buf[128]; diff --git a/llt/bitvector.c b/llt/bitvector.c index 5e458ac..55a497f 100644 --- a/llt/bitvector.c +++ b/llt/bitvector.c @@ -40,19 +40,23 @@ #include #endif -u_int32_t *bitvector_resize(u_int32_t *b, u_int64_t n, int initzero) +u_int32_t *bitvector_resize(u_int32_t *b, uint64_t oldsz, uint64_t newsz, + int initzero) { u_int32_t *p; - size_t sz = ((n+31)>>5) * 4; + size_t sz = ((newsz+31)>>5) * sizeof(uint32_t); p = LLT_REALLOC(b, sz); if (p == NULL) return NULL; - if (initzero) memset(p, 0, sz); + if (initzero && newsz>oldsz) { + size_t osz = ((oldsz+31)>>5) * sizeof(uint32_t); + memset(&p[osz], 0, sz-osz); + } return p; } u_int32_t *bitvector_new(u_int64_t n, int initzero) { - return bitvector_resize(NULL, n, initzero); + return bitvector_resize(NULL, 0, n, initzero); } size_t bitvector_nwords(u_int64_t nbits) @@ -72,3 +76,50 @@ u_int32_t bitvector_get(u_int32_t *b, u_int64_t n) { return b[n>>5] & (1<<(n&31)); } + +static int ntz(uint32_t x) +{ + int n; + + if (x == 0) return 32; + n = 1; + if ((x & 0x0000FFFF) == 0) {n = n +16; x = x >>16;} + if ((x & 0x000000FF) == 0) {n = n + 8; x = x >> 8;} + if ((x & 0x0000000F) == 0) {n = n + 4; x = x >> 4;} + if ((x & 0x00000003) == 0) {n = n + 2; x = x >> 2;} + return n - (x & 1); +} + +// given a bitvector of n bits, starting at bit n0 find the next +// set bit, including n0. +// returns n if no set bits. +uint32_t bitvector_next(uint32_t *b, uint64_t n0, uint64_t n) +{ + if (n == 0) return 0; + + uint32_t i = n0>>5; + uint32_t nb = n0&31; + uint32_t nw = (n+31)>>5; + + uint32_t w = b[i]>>nb; + if (w != 0) + return ntz(w)+n0; + if (nw == 1) + return n; + i++; + while (i < nw-1) { + w = b[i]; + if (w != 0) { + return ntz(w) + (i<<5); + } + i++; + } + w = b[i]; + nb = n&31; + i = ntz(w); + if (nb == 0) + return i + (n-32); + if (i >= nb) + return n; + return i + (n-nb); +} diff --git a/llt/bitvector.h b/llt/bitvector.h index 3beab98..cd1d713 100644 --- a/llt/bitvector.h +++ b/llt/bitvector.h @@ -32,11 +32,14 @@ static inline u_int32_t count_bits(u_int32_t b) u_int32_t bitreverse(u_int32_t x); u_int32_t *bitvector_new(u_int64_t n, int initzero); -u_int32_t *bitvector_resize(u_int32_t *b, u_int64_t n, int initzero); +u_int32_t *bitvector_resize(u_int32_t *b, uint64_t oldsz, uint64_t newsz, + int initzero); size_t bitvector_nwords(u_int64_t nbits); void bitvector_set(u_int32_t *b, u_int64_t n, u_int32_t c); u_int32_t bitvector_get(u_int32_t *b, u_int64_t n); +uint32_t bitvector_next(uint32_t *b, uint64_t n0, uint64_t n); + void bitvector_shr(u_int32_t *b, size_t n, u_int32_t s); void bitvector_shr_to(u_int32_t *dest, u_int32_t *b, size_t n, u_int32_t s); void bitvector_shl(u_int32_t *b, size_t n, u_int32_t s); diff --git a/llt/cplxprint.c b/llt/cplxprint.c index a2161b1..226c99d 100644 --- a/llt/cplxprint.c +++ b/llt/cplxprint.c @@ -1,7 +1,6 @@ #include #include #include -#include "ieee754.h" #include "dtypes.h" #include "utils.h" diff --git a/llt/dblprint.c b/llt/dblprint.c index 5279c17..dcbe43d 100644 --- a/llt/dblprint.c +++ b/llt/dblprint.c @@ -4,6 +4,7 @@ #include #include "dtypes.h" #include "ieee754.h" +#include "utils.h" int double_exponent(double d) { diff --git a/llt/dtypes.h b/llt/dtypes.h index cee00d7..713802b 100644 --- a/llt/dtypes.h +++ b/llt/dtypes.h @@ -16,6 +16,18 @@ We assume the LP64 convention for 64-bit platforms. */ +#ifdef WIN32 +#define STDCALL __stdcall +# ifdef IMPORT_EXPORTS +# define DLLEXPORT __declspec(dllimport) +# else +# define DLLEXPORT __declspec(dllexport) +# endif +#else +#define STDCALL +#define DLLEXPORT __attribute__ ((visibility("default"))) +#endif + #ifdef LINUX #include #include diff --git a/llt/dump.c b/llt/dump.c index e50f74a..27e8524 100644 --- a/llt/dump.c +++ b/llt/dump.c @@ -1,5 +1,4 @@ #include -#include #include "dtypes.h" #include "ios.h" #include "utils.h" diff --git a/llt/hashing.c b/llt/hashing.c index 098e8c7..f0a712a 100644 --- a/llt/hashing.c +++ b/llt/hashing.c @@ -4,7 +4,6 @@ #include #include #include -#include "ieee754.h" #include "dtypes.h" #include "utils.h" #include "hashing.h" diff --git a/llt/ieee754.h b/llt/ieee754.h index 44a1cd1..5f9ca37 100644 --- a/llt/ieee754.h +++ b/llt/ieee754.h @@ -1,192 +1,67 @@ -/* Copyright (C) 1992, 1995, 1996, 1999 Free Software Foundation, Inc. - This file is part of the GNU C Library. +#ifndef __IEEE754_H_ +#define __IEEE754_H_ - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _IEEE754_H - -#define _IEEE754_H 1 - -union ieee754_float - { +union ieee754_float { float f; - /* This is the IEEE 754 single-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN + struct { +#if BYTE_ORDER == BIG_ENDIAN unsigned int negative:1; unsigned int exponent:8; unsigned int mantissa:23; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN +#endif +#if BYTE_ORDER == LITTLE_ENDIAN unsigned int mantissa:23; unsigned int exponent:8; unsigned int negative:1; -#endif /* Little endian. */ - } ieee; +#endif + } ieee; +}; - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int quiet_nan:1; - unsigned int mantissa:22; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:22; - unsigned int quiet_nan:1; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee_nan; - }; +#define IEEE754_FLOAT_BIAS 0x7f -#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ - - -union ieee754_double - { +union ieee754_double { double d; - /* This is the IEEE 754 double-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN + struct { +#if BYTE_ORDER == BIG_ENDIAN unsigned int negative:1; unsigned int exponent:11; - /* Together these comprise the mantissa. */ unsigned int mantissa0:20; unsigned int mantissa1:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == BIG_ENDIAN - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; -# endif -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:19; - unsigned int mantissa1:32; -#else -# if __FLOAT_WORD_ORDER == BIG_ENDIAN - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; -# endif #endif - } ieee_nan; - }; +#if BYTE_ORDER == LITTLE_ENDIAN + unsigned int mantissa1:32; + unsigned int mantissa0:20; + unsigned int exponent:11; + unsigned int negative:1; +#endif + } ieee; +}; -#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ +#define IEEE754_DOUBLE_BIAS 0x3ff - -union ieee854_long_double - { +union ieee854_long_double { long double d; - /* This is the IEEE 854 double-extended-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN + struct { +#if BYTE_ORDER == BIG_ENDIAN unsigned int negative:1; unsigned int exponent:15; unsigned int empty:16; unsigned int mantissa0:32; unsigned int mantissa1:32; #endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == BIG_ENDIAN - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; - unsigned int mantissa0:32; - unsigned int mantissa1:32; -# else +#if BYTE_ORDER == LITTLE_ENDIAN unsigned int mantissa1:32; unsigned int mantissa0:32; unsigned int exponent:15; unsigned int negative:1; unsigned int empty:16; -# endif #endif - } ieee; - - /* This is for NaNs in the IEEE 854 double-extended-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - unsigned int empty:16; - unsigned int one:1; - unsigned int quiet_nan:1; - unsigned int mantissa0:30; - unsigned int mantissa1:32; -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == BIG_ENDIAN - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; - unsigned int mantissa0:30; - unsigned int quiet_nan:1; - unsigned int one:1; - unsigned int mantissa1:32; -# else - unsigned int mantissa1:32; - unsigned int mantissa0:30; - unsigned int quiet_nan:1; - unsigned int one:1; - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; -# endif -#endif - } ieee_nan; - }; + } ieee; +}; #define IEEE854_LONG_DOUBLE_BIAS 0x3fff -#endif /* ieee754.h */ +#endif diff --git a/llt/lltinit.c b/llt/lltinit.c index 12fcf69..ea534d6 100644 --- a/llt/lltinit.c +++ b/llt/lltinit.c @@ -3,7 +3,6 @@ #include #include #include -#include "ieee754.h" #include "dtypes.h" #include "timefuncs.h" #include "ios.h" diff --git a/llt/mt19937ar.c b/llt/mt19937ar.c index 63b8107..5b806d8 100644 --- a/llt/mt19937ar.c +++ b/llt/mt19937ar.c @@ -46,25 +46,25 @@ /* Period parameters */ #define mtN 624 #define mtM 397 -#define MATRIX_A 0x9908b0dfUL /* constant vector a */ -#define UPPER_MASK 0x80000000UL /* most significant w-r bits */ -#define LOWER_MASK 0x7fffffffUL /* least significant r bits */ +#define MATRIX_A 0x9908b0dfU /* constant vector a */ +#define UPPER_MASK 0x80000000U /* most significant w-r bits */ +#define LOWER_MASK 0x7fffffffU /* least significant r bits */ -static unsigned long mt[mtN]; /* the array for the state vector */ +static uint32_t mt[mtN]; /* the array for the state vector */ static int mti=mtN+1; /* mti==mtN+1 means mt[mtN] is not initialized */ /* initializes mt[mtN] with a seed */ -void init_genrand(unsigned long s) +void init_genrand(uint32_t s) { - mt[0]= s & 0xffffffffUL; + mt[0]= s & 0xffffffffU; for (mti=1; mti> 30)) + mti); + (1812433253U * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti); /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ /* In the previous versions, MSBs of the seed affect */ /* only MSBs of the array mt[]. */ /* 2002/01/09 modified by Makoto Matsumoto */ - mt[mti] &= 0xffffffffUL; + mt[mti] &= 0xffffffffU; /* for >32 bit machines */ } } @@ -73,54 +73,54 @@ void init_genrand(unsigned long s) /* init_key is the array for initializing keys */ /* key_length is its length */ /* slight change for C++, 2004/2/26 */ -void init_by_array(unsigned long init_key[], int key_length) +void init_by_array(uint32_t init_key[], int key_length) { int i, j, k; - init_genrand(19650218UL); + init_genrand(19650218U); i=1; j=0; k = (mtN>key_length ? mtN : key_length); for (; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525UL)) + mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525U)) + init_key[j] + j; /* non linear */ - mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ + mt[i] &= 0xffffffffU; /* for WORDSIZE > 32 machines */ i++; j++; if (i>=mtN) { mt[0] = mt[mtN-1]; i=1; } if (j>=key_length) j=0; } for (k=mtN-1; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941UL)) + mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941U)) - i; /* non linear */ - mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ + mt[i] &= 0xffffffffU; /* for WORDSIZE > 32 machines */ i++; if (i>=mtN) { mt[0] = mt[mtN-1]; i=1; } } - mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */ + mt[0] = 0x80000000U; /* MSB is 1; assuring non-zero initial array */ } /* generates a random number on [0,0xffffffff]-interval */ -unsigned long genrand_int32(void) +uint32_t genrand_int32(void) { - unsigned long y; - static unsigned long mag01[2]={0x0UL, MATRIX_A}; + uint32_t y; + static uint32_t mag01[2]={0x0U, MATRIX_A}; /* mag01[x] = x * MATRIX_A for x=0,1 */ if (mti >= mtN) { /* generate mtN words at one time */ int kk; if (mti == mtN+1) /* if init_genrand() has not been called, */ - init_genrand(5489UL); /* a default initial seed is used */ + init_genrand(5489U); /* a default initial seed is used */ for (kk=0;kk> 1) ^ mag01[y & 0x1UL]; + mt[kk] = mt[kk+mtM] ^ (y >> 1) ^ mag01[y & 0x1U]; } for (;kk> 1) ^ mag01[y & 0x1UL]; + mt[kk] = mt[kk+(mtM-mtN)] ^ (y >> 1) ^ mag01[y & 0x1U]; } y = (mt[mtN-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); - mt[mtN-1] = mt[mtM-1] ^ (y >> 1) ^ mag01[y & 0x1UL]; + mt[mtN-1] = mt[mtM-1] ^ (y >> 1) ^ mag01[y & 0x1U]; mti = 0; } @@ -129,8 +129,8 @@ unsigned long genrand_int32(void) /* Tempering */ y ^= (y >> 11); - y ^= (y << 7) & 0x9d2c5680UL; - y ^= (y << 15) & 0xefc60000UL; + y ^= (y << 7) & 0x9d2c5680U; + y ^= (y << 15) & 0xefc60000U; y ^= (y >> 18); return y; @@ -167,7 +167,7 @@ double genrand_real3(void) /* generates a random number on [0,1) with 53-bit resolution*/ double genrand_res53(void) { - unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6; + uint32_t a=genrand_int32()>>5, b=genrand_int32()>>6; return(a*67108864.0+b)*(1.0/9007199254740992.0); } #endif @@ -176,7 +176,7 @@ double genrand_res53(void) int main(void) { int i; - unsigned long init[4]={0x123, 0x234, 0x345, 0x456}, length=4; + uint32_t init[4]={0x123, 0x234, 0x345, 0x456}, length=4; init_by_array(init, length); printf("1000 outputs of genrand_int32()\n"); for (i=0; i<1000; i++) { diff --git a/llt/ptrhash.c b/llt/ptrhash.c index 40874d6..99f7b0e 100644 --- a/llt/ptrhash.c +++ b/llt/ptrhash.c @@ -11,7 +11,6 @@ #include "dtypes.h" #include "ptrhash.h" -#include "hashing.h" #define OP_EQ(x,y) ((x)==(y)) diff --git a/llt/random.c b/llt/random.c index 9133345..c086f79 100644 --- a/llt/random.c +++ b/llt/random.c @@ -16,8 +16,8 @@ double rand_double() { union ieee754_double d; - d.ieee.mantissa0 = random(); - d.ieee.mantissa1 = random(); + d.ieee.mantissa0 = genrand_int32(); + d.ieee.mantissa1 = genrand_int32(); d.ieee.negative = 0; d.ieee.exponent = IEEE754_DOUBLE_BIAS + 0; /* 2^0 */ return d.d - 1.0; @@ -27,7 +27,7 @@ float rand_float() { union ieee754_float f; - f.ieee.mantissa = random(); + f.ieee.mantissa = genrand_int32(); f.ieee.negative = 0; f.ieee.exponent = IEEE754_FLOAT_BIAS + 0; /* 2^0 */ return f.f - 1.0; @@ -58,5 +58,5 @@ double randn() void randomize() { u_int64_t tm = i64time(); - init_by_array((unsigned long*)&tm, 2); + init_by_array((uint32_t*)&tm, 2); } diff --git a/llt/random.h b/llt/random.h index 2216bbf..0ea58e4 100644 --- a/llt/random.h +++ b/llt/random.h @@ -7,8 +7,8 @@ double rand_double(); float rand_float(); double randn(); void randomize(); -unsigned long genrand_int32(); -void init_genrand(unsigned long s); +uint32_t genrand_int32(); +void init_genrand(uint32_t s); u_int64_t i64time(); #endif diff --git a/llt/socket.h b/llt/socket.h index d85284a..9222d6b 100644 --- a/llt/socket.h +++ b/llt/socket.h @@ -1,5 +1,5 @@ -#ifndef __JCSOCKET_H_ -#define __JCSOCKET_H_ +#ifndef __LLTSOCKET_H_ +#define __LLTSOCKET_H_ #ifdef WIN32 #include diff --git a/llt/timefuncs.c b/llt/timefuncs.c index 700dfa9..d2986c8 100644 --- a/llt/timefuncs.c +++ b/llt/timefuncs.c @@ -81,9 +81,9 @@ double clock_now() void timestring(double seconds, char *buffer, size_t len) { time_t tme = (time_t)seconds; - char *fmt = "%c"; /* needed to suppress GCC warning */ #ifdef LINUX + char *fmt = "%c"; /* needed to suppress GCC warning */ struct tm tm; localtime_r(&tme, &tm);