1d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
3d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen/*
4d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Part of the Wiring project - http://wiring.org.co
5d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Copyright (c) 2004-06 Hernando Barragan
6d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Modified 13 August 2006, David A. Mellis for Arduino - http://www.arduino.cc/
7d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
8d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  This library is free software; you can redistribute it and/or
9d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  modify it under the terms of the GNU Lesser General Public
10d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  License as published by the Free Software Foundation; either
11d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  version 2.1 of the License, or (at your option) any later version.
12d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
13d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  This library is distributed in the hope that it will be useful,
14d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  but WITHOUT ANY WARRANTY; without even the implied warranty of
15d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Lesser General Public License for more details.
17d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
18d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  You should have received a copy of the GNU Lesser General
19d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Public License along with this library; if not, write to the
20d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
21d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  Boston, MA  02111-1307  USA
22d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
23d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  $Id$
24d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen*/
25d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
26d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenextern "C" {
27d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  #include "stdlib.h"
28d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen}
29d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
30d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenvoid randomSeed(unsigned int seed)
31d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen{
32d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  if (seed != 0) {
33d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    srandom(seed);
34d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  }
35d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen}
36d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
37d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenlong random(long howbig)
38d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen{
39d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  if (howbig == 0) {
40d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    return 0;
41d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  }
42d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  return random() % howbig;
43d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen}
44d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
45d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenlong random(long howsmall, long howbig)
46d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen{
47d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  if (howsmall >= howbig) {
48d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen    return howsmall;
49d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  }
50d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  long diff = howbig - howsmall;
51d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  return random(diff) + howsmall;
52d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen}
53d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
54d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenlong map(long x, long in_min, long in_max, long out_min, long out_max)
55d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen{
56d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
57d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen}
58d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chen
59d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenunsigned int makeWord(unsigned int w) { return w; }
60d5790d78880d4bd60be277ee20e53a851aa8c11Mike J. Chenunsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8) | l; }