summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/common.c b/common.c
new file mode 100644
index 0000000..96c9b72
--- /dev/null
+++ b/common.c
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <stddef.h>
+#include <string.h>
+
+void
+indicate_file_area(FILE* fd, size_t line, size_t column, size_t span) {
+ char margin[] = " ";
+ /* FIXME use proper line counting, not this hack */
+ char buf[1024];
+ rewind(fd);
+ for (; line; line--) {
+ fgets(buf, sizeof(buf), fd);
+ }
+
+ fputs(margin, stderr);
+ fputs(buf, stderr);
+
+ /* corner case (still needed?) - buf was just return */
+ if (strlen(buf) == 1 && buf[0] == '\n') {
+ fputc('\n', stderr);
+ }
+
+ fputs(margin, stderr);
+ for (column--; column; column--) {
+ fputc(' ', stderr);
+ }
+ for (; span; span--) {
+ fputc('^', stderr);
+ }
+ fputc('\n', stderr);
+}