From 7728e25b8f92bd6a353fb21337960b69e6c454c4 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 20 Dec 2016 22:35:08 -0500 Subject: [PATCH] Output chars correctly via `write` --- CHANGELOG.md | 3 +++ runtime.c | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e291c24..7c992762 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Next Release - TBD +Bug Fixes + +- Display characters such as `#\space` correctly when output via `write`. # 0.3.3 - December 19, 2016 diff --git a/runtime.c b/runtime.c index 5cb1205b..229c2343 100644 --- a/runtime.c +++ b/runtime.c @@ -899,7 +899,22 @@ static object _Cyc_write(object x, FILE * port) return quote_void; } if (obj_is_char(x)) { - fprintf(port, "#\\%c", obj_obj2char(x)); + char c = obj_obj2char(x); + switch (c) { + case 0: fprintf(port, "#\\null"); break; + case 7: fprintf(port, "#\\alarm"); break; + case 8: fprintf(port, "#\\backspace"); break; + case 9: fprintf(port, "#\\tab"); break; + case 10: fprintf(port, "#\\newline"); break; + case 13: fprintf(port, "#\\return"); break; + case 27: fprintf(port, "#\\escape"); break; + case 32: fprintf(port, "#\\space"); break; + case 127: fprintf(port, "#\\delete"); break; + default: + fprintf(port, "#\\%c", obj_obj2char(x)); + break; + } + //fprintf(port, "#\\%c", obj_obj2char(x)); return quote_void; } if (obj_is_int(x)) {