static void data_config_print(const data_unset *d, int depth) { data_config *ds = (data_config *)d; array *a = (array *)ds->value; size_t i; size_t maxlen; if (0 != ds->context_ndx) { fprintf(stdout, "$%s %s \"%s\" {\n", ds->comp_key->ptr, ds->op->ptr, ds->string->ptr); array_print_indent(depth + 1); fprintf(stdout, "# block %d\n", ds->context_ndx); depth ++; } maxlen = array_get_max_key_length(a); for (i = 0; i < a->used; i ++) { data_unset *du = a->data[i]; size_t len = strlen(du->key->ptr); size_t j; array_print_indent(depth); fprintf(stdout, "%s", du->key->ptr); for (j = maxlen - len; j > 0; j --) { fprintf(stdout, " "); } fprintf(stdout, " = "); du->print(du, depth); fprintf(stdout, "\n"); } if (ds->childs) { fprintf(stdout, "\n"); for (i = 0; i < ds->childs->used; i ++) { data_unset *du = ds->childs->data[i]; /* only the 1st block of chaining */ if (NULL == ((data_config *)du)->prev) { fprintf(stdout, "\n"); array_print_indent(depth); du->print(du, depth); fprintf(stdout, "\n"); } } } if (0 != ds->context_ndx) { depth --; array_print_indent(depth); fprintf(stdout, "}"); fprintf(stdout, " # end of $%s %s \"%s\"", ds->comp_key->ptr, ds->op->ptr, ds->string->ptr); } if (ds->next) { fprintf(stdout, "\n"); array_print_indent(depth); fprintf(stdout, "else "); ds->next->print((data_unset *)ds->next, depth); } }
int array_print(array *a, int depth) { size_t i; size_t maxlen; int oneline = 1; if (a->used > 5) { oneline = 0; } for (i = 0; i < a->used && oneline; i++) { data_unset *du = a->data[i]; if (!du->is_index_key) { oneline = 0; break; } switch (du->type) { case TYPE_INTEGER: case TYPE_STRING: case TYPE_COUNT: break; default: oneline = 0; break; } } if (oneline) { fprintf(stdout, "("); for (i = 0; i < a->used; i++) { data_unset *du = a->data[i]; if (i != 0) { fprintf(stdout, ", "); } du->print(du, depth + 1); } fprintf(stdout, ")"); return 0; } maxlen = array_get_max_key_length(a); fprintf(stdout, "(\n"); for (i = 0; i < a->used; i++) { data_unset *du = a->data[i]; array_print_indent(depth + 1); if (!du->is_index_key) { int j; if (i && (i % 5) == 0) { fprintf(stdout, "# %zd\n", i); array_print_indent(depth + 1); } fprintf(stdout, "\"%s\"", du->key->ptr); for (j = maxlen - strlen(du->key->ptr); j > 0; j --) { fprintf(stdout, " "); } fprintf(stdout, " => "); } du->print(du, depth + 1); fprintf(stdout, ",\n"); } if (!(i && (i - 1 % 5) == 0)) { array_print_indent(depth + 1); fprintf(stdout, "# %zd\n", i); } array_print_indent(depth); fprintf(stdout, ")"); return 0; }