hs-ffmpeg-0.2.3: src/macros.hsc2hs.h
/*
Helper macros
*/
#define hsc_test(name) \
printf("%s = undefined\n", #name);
#define hsc_enum2(t, f, print_name, x) \
print_name; \
printf (" :: %s\n", #t); \
print_name; \
printf (" = %s ", #f); \
if ((x) < 0) \
printf ("(%ld)\n", (long)(x)); \
else \
printf ("%lu\n", (unsigned long)(x));
#define hsc_haskellizef(x) \
do{ \
const char *s = (x); \
int upper = 0; \
if (*s != '\0') \
{ \
putchar (tolower (*s)); \
++s; \
while (*s != '\0') \
{ \
if (*s == '_') \
upper = 1; \
else \
{ \
putchar (upper ? toupper (*s) : tolower (*s)); \
upper = 0; \
} \
++s; \
} \
} \
}while(0)
#define hsc_haskellizet(x) \
do{ \
const char *s = (x); \
int upper = 1; \
if (*s != '\0') \
{ \
while (*s != '\0') \
{ \
if (*s == '_') \
upper = 1; \
else \
{ \
putchar (upper ? toupper (*s) : tolower (*s)); \
upper = 0; \
} \
++s; \
} \
} \
}while(0)
#define hsc_begin_enum(type, val) \
do \
{ \
printf("data %s = \n", #type); \
char enum_type[255]; \
strcpy(enum_type, #type); \
char enum_buffer[500][255]; \
long enum_vals[255]; \
int e = 0; \
printf("\t "); \
hsc_haskellizet(#val); \
printf("\n"); \
strcpy(enum_buffer[e], #val); \
enum_vals[e++] = (long)val;
#define hsc_add_enum(val) \
printf("\t|"); \
hsc_haskellizet(#val); \
printf("\n"); \
strcpy(enum_buffer[e], #val); \
enum_vals[e++] = (long)val;
#define hsc_end_enum(deriving) \
if(deriving[0] != 0){ \
printf(" deriving (%s)\n\n", deriving); \
} \
printf("instance Enum %s where\n", enum_type); \
int i; \
for(i = 0; i < e; ++i){ \
printf("\tfromEnum "); \
hsc_haskellizet(enum_buffer[i]); \
printf(" = (%ld)\n", enum_vals[i]); \
} \
for(i = 0; i < e; ++i){ \
printf("\ttoEnum (%ld) = ", enum_vals[i]); \
hsc_haskellizet(enum_buffer[i]); \
printf("\n"); \
} \
printf("\ttoEnum id = error $ \"toEnum: fail to cast\" ++ (show id) ++ \"to %s\"\n", enum_type); \
}while(0)