32#ifndef _RWSTD_NO_OFFSETOF
33# define OFF(T, m) offsetof (T, m)
38# define OFF(T, m) (((const char*)&((T*)0)->m) - ((const char*)(T*)0))
47 typedef struct tm TimeT;
55#define ENTRY(member, comment) \
56 { OFF (struct tm, member), # member ";", " /* " comment " */" }
58 ENTRY (tm_sec,
"seconds after the minute [O..61] "),
59 ENTRY (tm_min,
"minutes after the hour [0..59] "),
60 ENTRY (tm_hour,
"hours since midnight [0..23] "),
61 ENTRY (tm_mday,
"day of the month [1..31] "),
62 ENTRY (tm_mon,
"months since January [0..11] "),
63 ENTRY (tm_year,
"years since 1900 "),
64 ENTRY (tm_wday,
"days since Sunday [0..6] "),
65 ENTRY (tm_yday,
"days since January 1 [0..365]"),
66 ENTRY (tm_isdst,
"Daylight Saving Time "),
69 const size_t N =
sizeof tm_info /
sizeof *tm_info;
77 for (
size_t i = 0;
i !=
N; ++
i) {
78 for (
size_t j = 0;
j !=
N; ++
j) {
79 if (curoff == tm_info [
j].
offset) {
80 sprintf (def + strlen (def),
82 tm_info [
j].
name, tm_info [
j].comment);
83 tm_info [
j].offset = size_t (-1);
84 curoff +=
sizeof (int);
89 curoff =
sizeof (
struct tm) -
N *
sizeof (int);
93 printf (
"#define _RWSTD_STRUCT_TM { "
94 "/* sizeof (struct tm) == %u */ \\\n%s",
95 sizeof (
struct tm), def);
98 if (
N *
sizeof (
int) !=
sizeof (
struct tm)) {
99 printf (
" char _C_fill [%u]; "
100 "/* fill to size */ \\\n",
101 sizeof (
struct tm) -
N *
sizeof (
int));
IMPORT_C SInt32 printf(const Char *,...)
#define ENTRY(member, comment)