+#define INDENT for (size_t i = 0; i < lvls + 1; i++) fprintf(fp, "\t")
+
+static char *process_array(FILE *fp, char *src)
+{
+ size_t lvls = 0;
+
+ size_t len = 1;
+ char *str = malloc(1);
+
+ *str = '\0';
+
+ for (; *src != '\0'; src++) {
+ if (*src == '[') {
+ *src++ = '\0';
+
+ size_t arrlen;
+ src += sscanf(src, "%lu", &arrlen);
+
+ INDENT; fprintf(fp, "for (size_t i%lu = 0; i%lu < %lu; i%lu++)\n", lvls, lvls, arrlen, lvls);
+
+ char *buf;
+ str = realloc(str, len += asprintf(&buf, "[i%lu]", lvls));
+ strcat(str, buf);
+ free(buf);
+
+ lvls++;
+ }
+ }
+
+ INDENT; return str;
+}
+
+#undef INDENT
+