]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/qte/qte-2.3.10/switches.h
OE tree imported from monotone branch org.openembedded.oz354fam083 at revision 8b12e3...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / qte / qte-2.3.10 / switches.h
1 /*
2  *  linux/include/linux/switches.h
3  *
4  *  Copyright (C) 2000 John Dorsey
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License version 2 as
8  *  published by the Free Software Foundation.
9  *
10  *  23 October 2000 - created.
11  */
12
13 #if !defined(_LINUX_SWITCHES_H)
14 #define _LINUX_SWITCHES_H
15
16 #define SWITCHES_MASK_SIZE  (128)
17
18 typedef unsigned long switches_bitfield;
19
20 #define SWITCHES_BITS            (sizeof(switches_bitfield) * 8)
21 #define SWITCHES_NUM_FIELDS      (SWITCHES_MASK_SIZE /  SWITCHES_BITS)
22 #define SWITCHES_FIELD_SELECT(i) ((i) / SWITCHES_BITS)
23 #define SWITCHES_FIELD_MASK(i)   ((switches_bitfield)(1 << (i) % \
24                                   SWITCHES_BITS))
25
26 typedef struct switches_mask_t {
27         unsigned int count;
28         switches_bitfield events[SWITCHES_NUM_FIELDS];
29         switches_bitfield states[SWITCHES_NUM_FIELDS];
30 } switches_mask_t;
31
32 #define SWITCHES_ZERO(m) \
33 do { \
34         unsigned int sz_i; \
35         (m)->count = 0; \
36         for(sz_i = 0; sz_i < SWITCHES_NUM_FIELDS; ++sz_i) \
37                 (m)->events[sz_i] = (m)->states[sz_i] = 0; \
38 } while (0)
39
40 /* `s' is the state of the switch, either 0 or non-zero: */
41 #define SWITCHES_SET(m, i, s) \
42 do { \
43         ((m)->events[SWITCHES_FIELD_SELECT((i))] |= \
44          SWITCHES_FIELD_MASK((i))); \
45         if(s) \
46                 ((m)->states[SWITCHES_FIELD_SELECT((i))] |= \
47                  SWITCHES_FIELD_MASK((i))); \
48         else \
49                 ((m)->states[SWITCHES_FIELD_SELECT((i))] &= \
50                  ~SWITCHES_FIELD_MASK((i))); \
51         ++((m)->count); \
52 } while (0)
53
54 /* Should only use to clear an event set by SWITCHES_SET(): */
55 #define SWITCHES_CLEAR(m, i) \
56 do { \
57         ((m)->events[SWITCHES_FIELD_SELECT((i))] &= \
58          ~SWITCHES_FIELD_MASK((i))); \
59         ((m)->states[SWITCHES_FIELD_SELECT((i))] &= \
60          ~SWITCHES_FIELD_MASK((i))); \
61         --((m)->count); \
62 }
63
64 #define SWITCHES_COUNT(m) ((m)->count)
65
66 /* Returns 0 or non-zero: */
67 #define SWITCHES_EVENT(m, i) \
68 ((m)->events[SWITCHES_FIELD_SELECT((i))] & SWITCHES_FIELD_MASK((i)))
69
70 /* Returns 0 or non-zero: */
71 #define SWITCHES_STATE(m, i) \
72 ((m)->states[SWITCHES_FIELD_SELECT((i))] & SWITCHES_FIELD_MASK((i)))
73
74 #endif  /* !defined(_LINUX_SWITCHES_H) */