aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-05-08 05:31:43 -0400
committerJesse Luehrs <doy@tozt.net>2014-05-08 05:31:43 -0400
commit1638a5e8a90f0f0a6d46cdf3ff9f2393c45c248a (patch)
tree880e1fed8f48ccfd5fdb383e0990355e0b755fd0
parent26e1ede47e62fe80c8b899847e5205cd60f130a9 (diff)
downloadrunes-1638a5e8a90f0f0a6d46cdf3ff9f2393c45c248a.tar.gz
runes-1638a5e8a90f0f0a6d46cdf3ff9f2393c45c248a.zip
abstract out error logging a bit
just spitting things to stderr isn't always going to be good enough, so let's at least provide one place to change that when necessary
-rw-r--r--Makefile3
-rw-r--r--src/config.c18
-rw-r--r--src/parser.c98
-rw-r--r--src/parser.l98
-rw-r--r--src/pty-unix.c1
-rw-r--r--src/runes.h2
-rw-r--r--src/screen.c2
-rw-r--r--src/util.c13
-rw-r--r--src/util.h6
-rw-r--r--src/window-xlib.c3
10 files changed, 118 insertions, 126 deletions
diff --git a/Makefile b/Makefile
index 5b3933e..110ca62 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,8 @@ OBJ = $(BUILD)runes.o \
$(BUILD)screen.o \
$(BUILD)config.o \
$(BUILD)window-xlib.o \
- $(BUILD)pty-unix.o
+ $(BUILD)pty-unix.o \
+ $(BUILD)util.o
LIBS = cairo cairo-xlib libuv pangocairo
CFLAGS ?= -g -Wall -Wextra -Werror
LDFLAGS ?= -g -Wall -Wextra -Werror
diff --git a/src/config.c b/src/config.c
index 689f042..b314522 100644
--- a/src/config.c
+++ b/src/config.c
@@ -1,4 +1,3 @@
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -390,7 +389,7 @@ static void runes_config_process_config_file(RunesTerm *t, FILE *config_file)
kend = kbegin + strcspn(kbegin, " \t=");
vbegin = kend + strspn(kend, " \t");
if (*vbegin != '=') {
- fprintf(stderr, "couldn't parse line: '%s'\n", line);
+ runes_warn("couldn't parse line: '%s'\n", line);
}
vbegin++;
vbegin = vbegin + strspn(vbegin, " \t");
@@ -414,12 +413,11 @@ static void runes_config_process_args(RunesTerm *t, int argc, char *argv[])
i++;
}
else {
- fprintf(
- stderr, "option found with no argument: '%s'\n", argv[i]);
+ runes_warn("option found with no argument: '%s'\n", argv[i]);
}
}
else {
- fprintf(stderr, "unknown argument: '%s'\n", argv[i]);
+ runes_warn("unknown argument: '%s'\n", argv[i]);
}
}
}
@@ -482,7 +480,7 @@ static void runes_config_set(RunesTerm *t, char *key, char *val)
i = atoi(&key[5]);
if (key[5] < '0' || key[5] > '9' || i < 0 || i > 255) {
- fprintf(stderr, "unknown option: '%s'\n", key);
+ runes_warn("unknown option: '%s'\n", key);
return;
}
newcolor = runes_config_parse_color(val);
@@ -507,7 +505,7 @@ static void runes_config_set(RunesTerm *t, char *key, char *val)
config->cmd = runes_config_parse_string(val);
}
else {
- fprintf(stderr, "unknown option: '%s'\n", key);
+ runes_warn("unknown option: '%s'\n", key);
}
}
@@ -520,7 +518,7 @@ static char runes_config_parse_bool(char *val)
return 0;
}
else {
- fprintf(stderr, "unknown boolean value: '%s'\n", val);
+ runes_warn("unknown boolean value: '%s'\n", val);
return 0;
}
}
@@ -528,7 +526,7 @@ static char runes_config_parse_bool(char *val)
static int runes_config_parse_uint(char *val)
{
if (strspn(val, "0123456789") != strlen(val)) {
- fprintf(stderr, "unknown unsigned integer value: '%s'\n", val);
+ runes_warn("unknown unsigned integer value: '%s'\n", val);
}
return atoi(val);
@@ -544,7 +542,7 @@ static cairo_pattern_t *runes_config_parse_color(char *val)
int r, g, b;
if (strlen(val) != 7 || sscanf(val, "#%2x%2x%2x", &r, &g, &b) != 3) {
- fprintf(stderr, "unknown color value: '%s'\n", val);
+ runes_warn("unknown color value: '%s'\n", val);
return NULL;
}
diff --git a/src/parser.c b/src/parser.c
index 193c747..388097d 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -1187,8 +1187,8 @@ case 49:
YY_RULE_SETUP
#line 182 "src/parser.l"
{
- fprintf(
- stderr, "unhandled CSI sequence: \\033%*s\\%hho\n",
+ runes_warn(
+ "unhandled CSI sequence: \\033%*s\\%hho\n",
(int)yyleng - 2, yytext + 1, yytext[yyleng - 1]);
}
YY_BREAK
@@ -1196,8 +1196,8 @@ case 50:
YY_RULE_SETUP
#line 188 "src/parser.l"
{
- fprintf(
- stderr, "unhandled CSI sequence: \\033%*s\n",
+ runes_warn(
+ "unhandled CSI sequence: \\033%*s\n",
(int)yyleng - 1, yytext + 1);
}
YY_BREAK
@@ -1206,8 +1206,8 @@ case 51:
YY_RULE_SETUP
#line 194 "src/parser.l"
{
- fprintf(
- stderr, "unhandled OSC sequence: \\033%*s\\%hho\n",
+ runes_warn(
+ "unhandled OSC sequence: \\033%*s\\%hho\n",
(int)yyleng - 2, yytext + 1, yytext[yyleng - 1]);
}
YY_BREAK
@@ -1215,8 +1215,8 @@ case 52:
YY_RULE_SETUP
#line 200 "src/parser.l"
{
- fprintf(
- stderr, "unhandled OSC sequence: \\033%*s\n",
+ runes_warn(
+ "unhandled OSC sequence: \\033%*s\n",
(int)yyleng - 1, yytext + 1);
}
YY_BREAK
@@ -1225,15 +1225,15 @@ case 53:
YY_RULE_SETUP
#line 206 "src/parser.l"
{
- fprintf(stderr, "unhandled escape sequence: \\%hho\n", yytext[1]);
+ runes_warn("unhandled escape sequence: \\%hho\n", yytext[1]);
}
YY_BREAK
case 54:
YY_RULE_SETUP
#line 210 "src/parser.l"
{
- fprintf(
- stderr, "unhandled escape sequence: %*s\n",
+ runes_warn(
+ "unhandled escape sequence: %*s\n",
(int)yyleng - 1, yytext + 1);
}
YY_BREAK
@@ -1242,14 +1242,14 @@ case 55:
YY_RULE_SETUP
#line 216 "src/parser.l"
{
- fprintf(stderr, "unhandled control character: \\%hho\n", yytext[0]);
+ runes_warn("unhandled control character: \\%hho\n", yytext[0]);
}
YY_BREAK
case 56:
YY_RULE_SETUP
#line 220 "src/parser.l"
{
- fprintf(stderr, "invalid utf8 byte: \\%hho\n", yytext[0]);
+ runes_warn("invalid utf8 byte: \\%hho\n", yytext[0]);
}
YY_BREAK
case 57:
@@ -2450,7 +2450,7 @@ static void runes_parser_extract_sm_params(
*nparams = 0;
while ((size_t)(pos - buf) < len) {
if (*nparams >= RUNES_PARSER_CSI_MAX_PARAMS) {
- fprintf(stderr, "max CSI parameter length exceeded\n");
+ runes_warn("max CSI parameter length exceeded\n");
break;
}
@@ -2549,7 +2549,7 @@ static void runes_parser_handle_ed(RunesTerm *t, char *buf, size_t len)
runes_screen_clear_screen(t);
break;
default:
- fprintf(stderr, "unknown ED parameter %d\n", params[0]);
+ runes_warn("unknown ED parameter %d\n", params[0]);
break;
}
}
@@ -2570,7 +2570,7 @@ static void runes_parser_handle_el(RunesTerm *t, char *buf, size_t len)
runes_screen_kill_line(t);
break;
default:
- fprintf(stderr, "unknown EL parameter %d\n", params[0]);
+ runes_warn("unknown EL parameter %d\n", params[0]);
break;
}
}
@@ -2615,9 +2615,7 @@ static void runes_parser_handle_sm(RunesTerm *t, char *buf, size_t len)
/* do nothing, no idea what this is even for */
break;
default:
- fprintf(
- stderr, "unknown SM parameter: %d\n",
- params[i]);
+ runes_warn("unknown SM parameter: %d\n", params[i]);
break;
}
break;
@@ -2640,16 +2638,13 @@ static void runes_parser_handle_sm(RunesTerm *t, char *buf, size_t len)
runes_screen_use_alternate_buffer(t);
break;
default:
- fprintf(
- stderr, "unknown SM parameter: %c%d\n",
- modes[i], params[i]);
+ runes_warn(
+ "unknown SM parameter: %c%d\n", modes[i], params[i]);
break;
}
break;
default:
- fprintf(
- stderr, "unknown SM parameter: %c%d\n",
- modes[i], params[i]);
+ runes_warn("unknown SM parameter: %c%d\n", modes[i], params[i]);
break;
}
}
@@ -2669,9 +2664,7 @@ static void runes_parser_handle_rm(RunesTerm *t, char *buf, size_t len)
/* do nothing, no idea what this is even for */
break;
default:
- fprintf(
- stderr, "unknown RM parameter: %d\n",
- params[i]);
+ runes_warn("unknown RM parameter: %d\n", params[i]);
break;
}
break;
@@ -2694,16 +2687,13 @@ static void runes_parser_handle_rm(RunesTerm *t, char *buf, size_t len)
runes_screen_use_normal_buffer(t);
break;
default:
- fprintf(
- stderr, "unknown RM parameter: %c%d\n",
- modes[i], params[i]);
+ runes_warn(
+ "unknown RM parameter: %c%d\n", modes[i], params[i]);
break;
}
break;
default:
- fprintf(
- stderr, "unknown RM parameter: %c%d\n",
- modes[i], params[i]);
+ runes_warn("unknown RM parameter: %c%d\n", modes[i], params[i]);
break;
}
}
@@ -2753,8 +2743,8 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 38: {
i++;
if (i >= nparams) {
- fprintf(
- stderr, "unknown SGR parameter: %d (too few parameters)\n",
+ runes_warn(
+ "unknown SGR parameter: %d (too few parameters)\n",
params[i - 1]);
break;
}
@@ -2763,8 +2753,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 2:
i += 3;
if (i >= nparams) {
- fprintf(
- stderr,
+ runes_warn(
"unknown SGR parameter: %d;%d (too few parameters)\n",
params[i - 4], params[i - 3]);
break;
@@ -2775,8 +2764,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 5:
i++;
if (i >= nparams) {
- fprintf(
- stderr,
+ runes_warn(
"unknown SGR parameter: %d;%d (too few parameters)\n",
params[i - 2], params[i - 1]);
break;
@@ -2785,8 +2773,8 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
break;
default:
i++;
- fprintf(
- stderr, "unknown SGR parameter: %d;%d\n",
+ runes_warn(
+ "unknown SGR parameter: %d;%d\n",
params[i - 2], params[i - 1]);
break;
}
@@ -2802,8 +2790,8 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 48: {
i++;
if (i >= nparams) {
- fprintf(
- stderr, "unknown SGR parameter: %d (too few parameters)\n",
+ runes_warn(
+ "unknown SGR parameter: %d (too few parameters)\n",
params[i - 1]);
break;
}
@@ -2812,8 +2800,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 2:
i += 3;
if (i >= nparams) {
- fprintf(
- stderr,
+ runes_warn(
"unknown SGR parameter: %d;%d (too few parameters)\n",
params[i - 4], params[i - 3]);
break;
@@ -2824,8 +2811,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 5:
i++;
if (i >= nparams) {
- fprintf(
- stderr,
+ runes_warn(
"unknown SGR parameter: %d;%d (too few parameters)\n",
params[i - 2], params[i - 1]);
break;
@@ -2834,8 +2820,8 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
break;
default:
i++;
- fprintf(
- stderr, "unknown SGR parameter: %d;%d\n",
+ runes_warn(
+ "unknown SGR parameter: %d;%d\n",
params[i - 2], params[i - 1]);
break;
}
@@ -2853,7 +2839,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
runes_screen_set_bg_color(t, params[i] - 92);
break;
default:
- fprintf(stderr, "unknown SGR parameter: %d\n", params[i]);
+ runes_warn("unknown SGR parameter: %d\n", params[i]);
break;
}
}
@@ -2883,14 +2869,14 @@ static void runes_parser_handle_decsed(RunesTerm *t, char *buf, size_t len)
break;
case 1:
/* XXX */
- fprintf(stderr, "unhandled DECSED parameter 1\n");
+ runes_warn("unhandled DECSED parameter 1\n");
break;
case 2:
/* XXX not quite correct */
runes_screen_clear_screen(t);
break;
default:
- fprintf(stderr, "unknown DECSED parameter %d\n", params[0]);
+ runes_warn("unknown DECSED parameter %d\n", params[0]);
break;
}
}
@@ -2907,14 +2893,14 @@ static void runes_parser_handle_decsel(RunesTerm *t, char *buf, size_t len)
break;
case 1:
/* XXX */
- fprintf(stderr, "unhandled DECSEL parameter 1\n");
+ runes_warn("unhandled DECSEL parameter 1\n");
break;
case 2:
/* XXX */
- fprintf(stderr, "unhandled DECSEL parameter 2\n");
+ runes_warn("unhandled DECSEL parameter 2\n");
break;
default:
- fprintf(stderr, "unknown DECSEL parameter %d\n", params[0]);
+ runes_warn("unknown DECSEL parameter %d\n", params[0]);
break;
}
}
diff --git a/src/parser.l b/src/parser.l
index 7c3ef02..b22c7a1 100644
--- a/src/parser.l
+++ b/src/parser.l
@@ -180,45 +180,45 @@ static void runes_parser_handle_text(RunesTerm *t, char *text, size_t len);
<<EOF>> return 0;
{CSI}[<=?]?{CSIPARAMS}{CTRL} {
- fprintf(
- stderr, "unhandled CSI sequence: \\033%*s\\%hho\n",
+ runes_warn(
+ "unhandled CSI sequence: \\033%*s\\%hho\n",
(int)yyleng - 2, yytext + 1, yytext[yyleng - 1]);
}
{CSI}[<=?]?{CSIPARAMS}{CHAR} {
- fprintf(
- stderr, "unhandled CSI sequence: \\033%*s\n",
+ runes_warn(
+ "unhandled CSI sequence: \\033%*s\n",
(int)yyleng - 1, yytext + 1);
}
{OSC}{CTRL} {
- fprintf(
- stderr, "unhandled OSC sequence: \\033%*s\\%hho\n",
+ runes_warn(
+ "unhandled OSC sequence: \\033%*s\\%hho\n",
(int)yyleng - 2, yytext + 1, yytext[yyleng - 1]);
}
{OSC}{CHAR} {
- fprintf(
- stderr, "unhandled OSC sequence: \\033%*s\n",
+ runes_warn(
+ "unhandled OSC sequence: \\033%*s\n",
(int)yyleng - 1, yytext + 1);
}
{ESC}{CTRL} {
- fprintf(stderr, "unhandled escape sequence: \\%hho\n", yytext[1]);
+ runes_warn("unhandled escape sequence: \\%hho\n", yytext[1]);
}
{ESC}{CHAR} {
- fprintf(
- stderr, "unhandled escape sequence: %*s\n",
+ runes_warn(
+ "unhandled escape sequence: %*s\n",
(int)yyleng - 1, yytext + 1);
}
{CTRL} {
- fprintf(stderr, "unhandled control character: \\%hho\n", yytext[0]);
+ runes_warn("unhandled control character: \\%hho\n", yytext[0]);
}
(?s:.) {
- fprintf(stderr, "invalid utf8 byte: \\%hho\n", yytext[0]);
+ runes_warn("invalid utf8 byte: \\%hho\n", yytext[0]);
}
%%
@@ -320,7 +320,7 @@ static void runes_parser_extract_sm_params(
*nparams = 0;
while ((size_t)(pos - buf) < len) {
if (*nparams >= RUNES_PARSER_CSI_MAX_PARAMS) {
- fprintf(stderr, "max CSI parameter length exceeded\n");
+ runes_warn("max CSI parameter length exceeded\n");
break;
}
@@ -419,7 +419,7 @@ static void runes_parser_handle_ed(RunesTerm *t, char *buf, size_t len)
runes_screen_clear_screen(t);
break;
default:
- fprintf(stderr, "unknown ED parameter %d\n", params[0]);
+ runes_warn("unknown ED parameter %d\n", params[0]);
break;
}
}
@@ -440,7 +440,7 @@ static void runes_parser_handle_el(RunesTerm *t, char *buf, size_t len)
runes_screen_kill_line(t);
break;
default:
- fprintf(stderr, "unknown EL parameter %d\n", params[0]);
+ runes_warn("unknown EL parameter %d\n", params[0]);
break;
}
}
@@ -485,9 +485,7 @@ static void runes_parser_handle_sm(RunesTerm *t, char *buf, size_t len)
/* do nothing, no idea what this is even for */
break;
default:
- fprintf(
- stderr, "unknown SM parameter: %d\n",
- params[i]);
+ runes_warn("unknown SM parameter: %d\n", params[i]);
break;
}
break;
@@ -510,16 +508,13 @@ static void runes_parser_handle_sm(RunesTerm *t, char *buf, size_t len)
runes_screen_use_alternate_buffer(t);
break;
default:
- fprintf(
- stderr, "unknown SM parameter: %c%d\n",
- modes[i], params[i]);
+ runes_warn(
+ "unknown SM parameter: %c%d\n", modes[i], params[i]);
break;
}
break;
default:
- fprintf(
- stderr, "unknown SM parameter: %c%d\n",
- modes[i], params[i]);
+ runes_warn("unknown SM parameter: %c%d\n", modes[i], params[i]);
break;
}
}
@@ -539,9 +534,7 @@ static void runes_parser_handle_rm(RunesTerm *t, char *buf, size_t len)
/* do nothing, no idea what this is even for */
break;
default:
- fprintf(
- stderr, "unknown RM parameter: %d\n",
- params[i]);
+ runes_warn("unknown RM parameter: %d\n", params[i]);
break;
}
break;
@@ -564,16 +557,13 @@ static void runes_parser_handle_rm(RunesTerm *t, char *buf, size_t len)
runes_screen_use_normal_buffer(t);
break;
default:
- fprintf(
- stderr, "unknown RM parameter: %c%d\n",
- modes[i], params[i]);
+ runes_warn(
+ "unknown RM parameter: %c%d\n", modes[i], params[i]);
break;
}
break;
default:
- fprintf(
- stderr, "unknown RM parameter: %c%d\n",
- modes[i], params[i]);
+ runes_warn("unknown RM parameter: %c%d\n", modes[i], params[i]);
break;
}
}
@@ -623,8 +613,8 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 38: {
i++;
if (i >= nparams) {
- fprintf(
- stderr, "unknown SGR parameter: %d (too few parameters)\n",
+ runes_warn(
+ "unknown SGR parameter: %d (too few parameters)\n",
params[i - 1]);
break;
}
@@ -633,8 +623,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 2:
i += 3;
if (i >= nparams) {
- fprintf(
- stderr,
+ runes_warn(
"unknown SGR parameter: %d;%d (too few parameters)\n",
params[i - 4], params[i - 3]);
break;
@@ -645,8 +634,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 5:
i++;
if (i >= nparams) {
- fprintf(
- stderr,
+ runes_warn(
"unknown SGR parameter: %d;%d (too few parameters)\n",
params[i - 2], params[i - 1]);
break;
@@ -655,8 +643,8 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
break;
default:
i++;
- fprintf(
- stderr, "unknown SGR parameter: %d;%d\n",
+ runes_warn(
+ "unknown SGR parameter: %d;%d\n",
params[i - 2], params[i - 1]);
break;
}
@@ -672,8 +660,8 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 48: {
i++;
if (i >= nparams) {
- fprintf(
- stderr, "unknown SGR parameter: %d (too few parameters)\n",
+ runes_warn(
+ "unknown SGR parameter: %d (too few parameters)\n",
params[i - 1]);
break;
}
@@ -682,8 +670,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 2:
i += 3;
if (i >= nparams) {
- fprintf(
- stderr,
+ runes_warn(
"unknown SGR parameter: %d;%d (too few parameters)\n",
params[i - 4], params[i - 3]);
break;
@@ -694,8 +681,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
case 5:
i++;
if (i >= nparams) {
- fprintf(
- stderr,
+ runes_warn(
"unknown SGR parameter: %d;%d (too few parameters)\n",
params[i - 2], params[i - 1]);
break;
@@ -704,8 +690,8 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
break;
default:
i++;
- fprintf(
- stderr, "unknown SGR parameter: %d;%d\n",
+ runes_warn(
+ "unknown SGR parameter: %d;%d\n",
params[i - 2], params[i - 1]);
break;
}
@@ -723,7 +709,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
runes_screen_set_bg_color(t, params[i] - 92);
break;
default:
- fprintf(stderr, "unknown SGR parameter: %d\n", params[i]);
+ runes_warn("unknown SGR parameter: %d\n", params[i]);
break;
}
}
@@ -753,14 +739,14 @@ static void runes_parser_handle_decsed(RunesTerm *t, char *buf, size_t len)
break;
case 1:
/* XXX */
- fprintf(stderr, "unhandled DECSED parameter 1\n");
+ runes_warn("unhandled DECSED parameter 1\n");
break;
case 2:
/* XXX not quite correct */
runes_screen_clear_screen(t);
break;
default:
- fprintf(stderr, "unknown DECSED parameter %d\n", params[0]);
+ runes_warn("unknown DECSED parameter %d\n", params[0]);
break;
}
}
@@ -777,14 +763,14 @@ static void runes_parser_handle_decsel(RunesTerm *t, char *buf, size_t len)
break;
case 1:
/* XXX */
- fprintf(stderr, "unhandled DECSEL parameter 1\n");
+ runes_warn("unhandled DECSEL parameter 1\n");
break;
case 2:
/* XXX */
- fprintf(stderr, "unhandled DECSEL parameter 2\n");
+ runes_warn("unhandled DECSEL parameter 2\n");
break;
default:
- fprintf(stderr, "unknown DECSEL parameter %d\n", params[0]);
+ runes_warn("unknown DECSEL parameter %d\n", params[0]);
break;
}
}
diff --git a/src/pty-unix.c b/src/pty-unix.c
index 82a3809..b43ae6f 100644
--- a/src/pty-unix.c
+++ b/src/pty-unix.c
@@ -1,5 +1,6 @@
#define _XOPEN_SOURCE 600
#include <fcntl.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
diff --git a/src/runes.h b/src/runes.h
index 05398e9..18d6174 100644
--- a/src/runes.h
+++ b/src/runes.h
@@ -28,6 +28,8 @@ struct runes_loop_data {
RunesTerm *t;
};
+#include "util.h"
+
#include "window-xlib.h"
#include "pty-unix.h"
diff --git a/src/screen.c b/src/screen.c
index 57b536d..a9ffb3e 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -446,7 +446,7 @@ void runes_screen_set_scroll_region(
RunesScreen *scr = &t->scr;
if (left > 0 || right < scr->grid->max.col - 1) {
- fprintf(stderr, "vertical scroll regions not yet implemented\n");
+ runes_warn("vertical scroll regions not yet implemented\n");
}
if (top > bottom) {
diff --git a/src/util.c b/src/util.c
new file mode 100644
index 0000000..d87fd72
--- /dev/null
+++ b/src/util.c
@@ -0,0 +1,13 @@
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "runes.h"
+
+void runes_warn(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ /* XXX make this do something else on windows */
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+}
diff --git a/src/util.h b/src/util.h
new file mode 100644
index 0000000..f542261
--- /dev/null
+++ b/src/util.h
@@ -0,0 +1,6 @@
+#ifndef _RUNES_UTIL_H
+#define _RUNES_UTIL_H
+
+void runes_warn(const char *fmt, ...);
+
+#endif
diff --git a/src/window-xlib.c b/src/window-xlib.c
index 2c36e44..cc9ec7e 100644
--- a/src/window-xlib.c
+++ b/src/window-xlib.c
@@ -1,5 +1,4 @@
#include <cairo-xlib.h>
-#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <X11/cursorfont.h>
@@ -167,7 +166,7 @@ void runes_window_backend_create_window(RunesTerm *t, int argc, char *argv[])
NULL
);
if (w->ic == NULL) {
- fprintf(stderr, "failed\n");
+ runes_warn("failed\n");
exit(1);
}