|
/* a simple driver for scheme_entry */
#include <stdio.h>
#define fixnum_mask 3 // 11
#define fixnum_tag 0 // 00
#define fixnum_shift 2
#define char_mask 240 // 11110000
#define char_tag 15 // 00001111
#define char_shift 8
#define boolean_mask 96 // 1100000
#define boolean_tag 31 // 0011111
#define boolean_shift 7
#define empty_list 47 // 00101111
int scheme_entry();
int main(int argc, char **argv) {
int val = scheme_entry();
if ((val & fixnum_mask) == fixnum_tag) {
printf("%d\n", val >> fixnum_shift);
} else if ((val & char_mask) == 0) {
printf("#\\%c\n", val >> char_shift);
} else if ((val & boolean_mask) == 0) {
printf("#%s\n", (val >> boolean_shift) == 1 ? "t" : "f");
} else if (val == empty_list) {
printf("()\n");
} else {
printf("Error: unhandled value: %d\n", val);
return 1;
}
return 0;
}
|