From 5efee7c94adb691799becb605002e85e13bf11e5 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Mon, 6 Nov 2006 18:18:05 +0000 Subject: Forgot to use cvs add on a few new files in the fresh checkout I used. woops. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11453 a1c6a512-1295-4272-9138-f99709370657 --- firmware/general.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 firmware/general.c (limited to 'firmware/general.c') diff --git a/firmware/general.c b/firmware/general.c new file mode 100644 index 0000000..7f43480 --- /dev/null +++ b/firmware/general.c @@ -0,0 +1,77 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2006 by Michael Sevakis + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include +#include "config.h" +#include "general.h" + +int round_value_to_list32(unsigned long value, + const unsigned long list[], + int count, + bool signd) +{ + unsigned long dmin = ULONG_MAX; + int idmin = -1, i; + + for (i = 0; i < count; i++) + { + unsigned long diff; + + if (list[i] == value) + { + idmin = i; + break; + } + + if (signd ? ((long)list[i] < (long)value) : (list[i] < value)) + diff = value - list[i]; + else + diff = list[i] - value; + + if (diff < dmin) + { + dmin = diff; + idmin = i; + } + } + + return idmin; +} /* round_value_to_list32 */ + +/* Number of bits set in src_mask should equal src_list length */ +int make_list_from_caps32(unsigned long src_mask, + const unsigned long *src_list, + unsigned long caps_mask, + unsigned long *caps_list) +{ + int i, count; + unsigned long mask; + + for (mask = src_mask, count = 0, i = 0; + mask != 0; + src_mask = mask, i++) + { + unsigned long test_bit; + mask &= mask - 1; /* Zero lowest bit set */ + test_bit = mask ^ src_mask; /* Isolate the bit */ + if (test_bit & caps_mask) /* Add item if caps has test bit set */ + caps_list[count++] = src_list ? src_list[i] : (unsigned long)i; + } + + return count; +} /* make_list_from_caps32 */ -- cgit v1.1