6 #include <mLib/macros.h>
8 #include <mLib/report.h>
15 int main(int argc
, char *argv
[])
19 dstr d
= DSTR_INIT
, dd
= DSTR_INIT
;
20 const char *fn
, *p
, *q
;
26 for (i
= 1; i
< argc
; i
++) {
28 if ((fp
= fopen(fn
, "r")) == 0)
29 die(1, "fopen(%s): %s", fn
, strerror(errno
));
30 q
= strrchr(fn
, '.'); tagsz
= q ? q
- fn
: strlen(fn
);
33 DRESET(&d
); DRESET(&dd
);
34 if (dstr_putline(&d
, fp
) == EOF
) break;
36 if (!d
.len
|| d
.buf
[0] == '*' || d
.buf
[0] == '[') continue;
38 for (p
= d
.buf
, j
= 0; j
< N(f
); j
++) {
39 while (*p
== ' ') p
++;
43 f
[j
++].n
= d
.buf
+ d
.len
- p
;
46 while (*p
&& *p
!= ' ') p
++;
50 if (j
< N(f
)) die(1, "failed to parse input");
52 DPUTM(&dd
, f
[0].p
, f
[0].n
); DPUTC(&dd
, ' ');
53 DPUTM(&dd
, f
[2].p
, f
[2].n
); DPUTC(&dd
, ' ');
54 DPUTM(&dd
, f
[3].p
, f
[3].n
); DPUTC(&dd
, ' ');
55 DPUTM(&dd
, f
[4].p
, f
[4].n
); DPUTC(&dd
, ' ');
56 DPUTM(&dd
, f
[5].p
, f
[5].n
); DPUTC(&dd
, '|');
57 DPUTM(&dd
, fn
, tagsz
); DPUTC(&dd
, '|');
58 DPUTM(&dd
, f
[6].p
, f
[6].n
); DPUTC(&dd
, '\n');
59 fwrite(dd
.buf
, 1, dd
.len
, stdout
);
62 if (ferror(fp
)) die(1, "ferror(%s)", fn
);
66 if (ferror(stdout
) || fflush(stdout
) || fclose(stdout
))
67 die(1, "stdout: %s", strerror(errno
));