/* Part of the Wiring project - http://wiring.org.co Copyright (c) 2004-06 Hernando Barragan Modified 13 August 2006, David A. Mellis for Arduino - http://www.arduino.cc/ This 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. This 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 this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include static uint32_t seed; void randomSeed(uint32_t newseed) { if (newseed > 0) seed = newseed; } void srandom(unsigned int newseed) { seed = newseed; } int32_t random(void) { int32_t hi, lo, x; // the algorithm used in avr-libc 1.6.4 x = seed; if (x == 0) x = 123459876; hi = x / 127773; lo = x % 127773; x = 16807 * lo - 2836 * hi; if (x < 0) x += 0x7FFFFFFF; seed = x; return x; } uint32_t random(uint32_t howbig) { if (howbig == 0) return 0; return random() % howbig; } int32_t random(int32_t howsmall, int32_t howbig) { if (howsmall >= howbig) return howsmall; int32_t diff = howbig - howsmall; return random(diff) + howsmall; } unsigned int makeWord(unsigned int w) { return w; } unsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8) | l; }