106 |
|
|
107 |
|
|
108 |
|
|
109 |
static const char * cxrs[] = |
/* Every cxr-pattern is made up of pairs of bits, starting with the two least |
110 |
|
* significant bits. If in a pair of bits the least significant of the two |
111 |
|
* bits is 0, this means CDR, otherwise CAR. The most significant bits of the |
112 |
|
* two bits is only needed to indicate when cxr-ing is ready. This is the |
113 |
|
* case, when all remaining pairs of bits equal 00. */ |
114 |
|
|
115 |
|
typedef struct { |
116 |
|
const char *name; |
117 |
|
unsigned char pattern; |
118 |
|
} t_cxr; |
119 |
|
|
120 |
|
static const t_cxr cxrs[] = |
121 |
{ |
{ |
122 |
"car", |
{"cdr", 0x02}, /* 00000010 */ |
123 |
"cdr", |
{"car", 0x03}, /* 00000011 */ |
124 |
"caar", |
{"cddr", 0x0a}, /* 00001010 */ |
125 |
"cadr", |
{"cdar", 0x0b}, /* 00001011 */ |
126 |
"cdar", |
{"cadr", 0x0e}, /* 00001110 */ |
127 |
"cddr", |
{"caar", 0x0f}, /* 00001111 */ |
128 |
"caaar", |
{"cdddr", 0x2a}, /* 00101010 */ |
129 |
"caadr", |
{"cddar", 0x2b}, /* 00101011 */ |
130 |
"cadar", |
{"cdadr", 0x2e}, /* 00101110 */ |
131 |
"caddr", |
{"cdaar", 0x2f}, /* 00101111 */ |
132 |
"cdaar", |
{"caddr", 0x3a}, /* 00111010 */ |
133 |
"cdadr", |
{"cadar", 0x3b}, /* 00111011 */ |
134 |
"cddar", |
{"caadr", 0x3e}, /* 00111110 */ |
135 |
"cdddr", |
{"caaar", 0x3f}, /* 00111111 */ |
136 |
"caaaar", |
{"cddddr", 0xaa}, /* 10101010 */ |
137 |
"caaadr", |
{"cdddar", 0xab}, /* 10101011 */ |
138 |
"caadar", |
{"cddadr", 0xae}, /* 10101110 */ |
139 |
"caaddr", |
{"cddaar", 0xaf}, /* 10101111 */ |
140 |
"cadaar", |
{"cdaddr", 0xba}, /* 10111010 */ |
141 |
"cadadr", |
{"cdadar", 0xbb}, /* 10111011 */ |
142 |
"caddar", |
{"cdaadr", 0xbe}, /* 10111110 */ |
143 |
"cadddr", |
{"cdaaar", 0xbf}, /* 10111111 */ |
144 |
"cdaaar", |
{"cadddr", 0xea}, /* 11101010 */ |
145 |
"cdaadr", |
{"caddar", 0xeb}, /* 11101011 */ |
146 |
"cdadar", |
{"cadadr", 0xee}, /* 11101110 */ |
147 |
"cdaddr", |
{"cadaar", 0xef}, /* 11101111 */ |
148 |
"cddaar", |
{"caaddr", 0xfa}, /* 11111010 */ |
149 |
"cddadr", |
{"caadar", 0xfb}, /* 11111011 */ |
150 |
"cdddar", |
{"caaadr", 0xfe}, /* 11111110 */ |
151 |
"cddddr", |
{"caaaar", 0xff}, /* 11111111 */ |
152 |
0 |
{0, 0} |
153 |
}; |
}; |
154 |
|
|
155 |
|
|
159 |
{ |
{ |
160 |
unsigned int subnr = 0; |
unsigned int subnr = 0; |
161 |
|
|
162 |
for (subnr = 0; cxrs [subnr]; subnr++) |
for (subnr = 0; cxrs[subnr].name; subnr++) |
163 |
scm_c_define_subr (cxrs [subnr], scm_tc7_cxr, NULL); |
{ |
164 |
|
SCM (*pattern) () = (SCM (*) ()) (scm_t_bits) cxrs[subnr].pattern; |
165 |
|
scm_c_define_subr (cxrs[subnr].name, scm_tc7_cxr, pattern); |
166 |
|
} |
167 |
|
|
168 |
#include "libguile/pairs.x" |
#include "libguile/pairs.x" |
169 |
} |
} |