$ cat struct.c struct tm { int tm_sec; /* seconds, range 0 to 59 */ int tm_min; /* minutes, range 0 to 59 */ int tm_hour; /* hours, range 0 to 23 */ int tm_mday; /* day of the month, range 1 to 31 */ int tm_mon; /* month, range 0 to 11 */ int tm_year; /* The number of years since 1900 */ int tm_wday; /* day of the week, range 0 to 6 */ int tm_yday; /* day in the year, range 0 to 365 */ int tm_isdst; /* daylight saving time */ }; $ chicken-bind - -o - < struct.c ;;; GENERATED BY CHICKEN-BIND FROM - (begin (define tm-tm_sec (foreign-lambda* integer (((c-pointer (struct "tm")) s)) "return(s->tm_sec);")) (define tm-tm_min (foreign-lambda* integer (((c-pointer (struct "tm")) s)) "return(s->tm_min);")) (define tm-tm_hour (foreign-lambda* integer (((c-pointer (struct "tm")) s)) "return(s->tm_hour);")) (define tm-tm_mday (foreign-lambda* integer (((c-pointer (struct "tm")) s)) "return(s->tm_mday);")) (define tm-tm_mon (foreign-lambda* integer (((c-pointer (struct "tm")) s)) "return(s->tm_mon);")) (define tm-tm_year (foreign-lambda* integer (((c-pointer (struct "tm")) s)) "return(s->tm_year);")) (define tm-tm_wday (foreign-lambda* integer (((c-pointer (struct "tm")) s)) "return(s->tm_wday);")) (define tm-tm_yday (foreign-lambda* integer (((c-pointer (struct "tm")) s)) "return(s->tm_yday);")) (define tm-tm_isdst (foreign-lambda* integer (((c-pointer (struct "tm")) s)) "return(s->tm_isdst);")) (define make-tm (foreign-lambda* (c-pointer (struct "tm")) ((integer tm_sec) (integer tm_min) (integer tm_hour) (integer tm_mday) (integer tm_mon) (integer tm_year) (integer tm_wday) (integer tm_yday) (integer tm_isdst)) "struct tm *tmp_ = (struct tm *)C_malloc(sizeof(struct tm));\ntmp_->tm_sec = tm_sec;\ntmp_->tm_min = tm_min;\ntmp_->tm_hour = tm_hour;\ntmp_->tm_mday = tm_mday;\ntmp_->tm_mon = tm_mon;\ntmp_->tm_year = tm_year;\ntmp_->tm_wday = tm_wday;\ntmp_->tm_yday = tm_yday;\ntmp_->tm_isdst = tm_isdst;\nreturn(tmp_);;\n"))) ;;; END OF FILE