+char* gedcom_age_to_string(const struct age_value* val)
+{
+ int num = 0;
+ reset_buffer(&age_buffer);
+
+ switch (val->mod) {
+ case AGE_LESS_THAN:
+ safe_buf_append(&age_buffer, "<"); break;
+ case AGE_GREATER_THAN:
+ safe_buf_append(&age_buffer, ">"); break;
+ default:
+ break;
+ }
+
+ switch (val->type) {
+ case AGE_UNRECOGNIZED:
+ reset_buffer(&age_buffer);
+ safe_buf_append(&age_buffer, val->phrase); break;
+ case AGE_CHILD:
+ safe_buf_append(&age_buffer, "CHILD"); break;
+ case AGE_INFANT:
+ safe_buf_append(&age_buffer, "INFANT"); break;
+ case AGE_STILLBORN:
+ safe_buf_append(&age_buffer, "STILLBORN"); break;
+ case AGE_NUMERIC:
+ if (val->years != -1) {
+ num = 1;
+ safe_buf_append(&age_buffer, "%dy", val->years);
+ }
+ if (val->months != -1) {
+ if (num)
+ safe_buf_append(&age_buffer, " ");
+ num = 1;
+ safe_buf_append(&age_buffer, "%dm", val->months);
+ }
+ if (val->days != -1) {
+ if (num)
+ safe_buf_append(&age_buffer, " ");
+ num = 1;
+ safe_buf_append(&age_buffer, "%dd", val->days);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return get_buf_string(&age_buffer);
+}