PDCurses はその名の通り Public Domain な curses 実装な訳ですが、Windows の実装こそありますが如何ともし難い問題がありました。
PDCurses には、ワイド文字列関数とバイト列で貰う実装があります。UNIX 系アプリケーションの多くは内部文字列がほぼ UTF-8 となり、C言語で受け渡される文字列は既成事実として UTF-8 になってしまいました。
しかしながら日本の Windows ではバイト列と言えば Shift_JIS な訳で、そのまま移植してしまうと文字化けが発生します。各アプリケーション側がワイド文字列でコードを書いてくれれば良いのですが、そんな事を気にする人はまずいません。ましてや各アプリケーションが UTF-8 と MBCS (Multi Byte Character Set) の変換を行うのは酷な話です。出来れば内部文字列は UTF-8 のままで Windows でも正しく表示されて欲しいのです。
mattn/pdcurses - GitHub
https://github.com/mattn/pdcurses
という訳で pdcurses に手を入れてみました。もし pdcurses.dll をリンクしていて表示が文字化けしているアプリケーションがあれば、dll を入れ替えるだけで文字化けが解消するかと思います。
今日はこれを使って、コマンドラインベースのプレゼンテーションツールである mdp を Windows で動かしてみました。
visit1985/mdp · GitHub
A command-line based markdown presentation tool.
https://github.com/visit1985/mdp
mdp 自身は大した事をやってないので、ncurses の代わりに pdcurses をリンクする様な修正を入れただけです。
diff --git a/Makefile b/Makefile
index 63a1feb..54f8327 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@
CFLAGS = -O3 -Wall
LDFLAGS = -s
-LDLIBS = -lncurses
+LDLIBS = -lpdcurses
OBJECTS = cstring.o cstack.o markdown.o parser.o viewer.o mdp.o
DESTDIR ?= /usr/bin
diff --git a/include/viewer.h b/include/viewer.h
index 68c7a13..f6e70fb 100644
--- a/include/viewer.h
+++ b/include/viewer.h
@@ -32,7 +32,7 @@
*
*/
-#include <ncurses.h>
+#include <curses.h>
#include "parser.h"
#include "cstack.h"
diff --git a/viewer.c b/viewer.c
index ba76f2f..ed83196 100644
--- a/viewer.c
+++ b/viewer.c
@@ -22,7 +22,6 @@
*/
#include <locale.h> // setlocale
-#include <ncurses.h>
#include <stdlib.h>
#include <string.h> // strchr
#include <unistd.h>
sample.md
も日本語にして正しく動作する事が確認出来ました。