From 5d268b1f36dd103ec2ba8832d8bd57a69d23e618 Mon Sep 17 00:00:00 2001 From: Nishi Date: Thu, 25 Jun 2026 20:18:21 +0900 Subject: [PATCH] WIP Windows fix --- CMakeLists.txt | 6 +++++- include/sj4ime/sj4ime.h | 18 ++++++++++++++++++ include/sj4ime/sj_ime.h | 4 ---- lib/sj4ime/ime.c | 20 +++++++++++++++++++- src/sj4mkdic/char.c | 26 +++++++++++++++----------- src/sj4mkdic/readline.c | 6 ++---- src/sj4test/main.c | 5 +++++ 7 files changed, 64 insertions(+), 21 deletions(-) create mode 100644 include/sj4ime/sj4ime.h delete mode 100644 include/sj4ime/sj_ime.h diff --git a/CMakeLists.txt b/CMakeLists.txt index bae074b..f794962 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,6 @@ elseif(SJ4_EMBED) endif() sj4_library(sj4rkcv) -sj4_library(sj4ime) if(NOT SJ4_GLOBAL) sj4_library(sj4lib) @@ -46,6 +45,11 @@ if(NOT SJ4_GLOBAL) endif() endif() +if(NOT SJ4_GLOBAL) + sj4_library(sj4ime) + target_link_libraries(sj4ime PUBLIC sj4lib) +endif() + if(SJ4_BUILD_TOOLS OR (NOT CMAKE_BINARY_DIR MATCHES CMAKE_CURRENT_SOURCE_DIR AND NOT SJ4_BUILD_ONLY_LIB)) file(GLOB_RECURSE SJ4MKDIC_SRCS src/sj4mkdic/**.c) add_executable(sj4mkdic ${SJ4MKDIC_SRCS}) diff --git a/include/sj4ime/sj4ime.h b/include/sj4ime/sj4ime.h new file mode 100644 index 0000000..79a3d35 --- /dev/null +++ b/include/sj4ime/sj4ime.h @@ -0,0 +1,18 @@ +#ifndef __SJ4IME_H__ +#define __SJ4IME_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct sj4ime Sj4Ime; + +Sj4Ime* sj4_ime(int charset, const char* dict); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/sj4ime/sj_ime.h b/include/sj4ime/sj_ime.h deleted file mode 100644 index 062428c..0000000 --- a/include/sj4ime/sj_ime.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef __SJ_IME_H__ -#define __SJ_IME_H__ - -#endif diff --git a/lib/sj4ime/ime.c b/lib/sj4ime/ime.c index 5b043a7..037ba95 100644 --- a/lib/sj4ime/ime.c +++ b/lib/sj4ime/ime.c @@ -1 +1,19 @@ -#include +#include + +#include + +struct sj4ime { + Sj4Lib* lib; +}; + +Sj4Ime* sj4_ime(int charset, const char* dict) { + Sj4Ime* ime; + + if((ime = calloc(1, sizeof(*ime))) == NULL) return NULL; + + if((ime->lib = sj4_open(charset, dict)) == NULL) { + free(ime); + + return NULL; + } +} diff --git a/src/sj4mkdic/char.c b/src/sj4mkdic/char.c index 8434afe..e8f4582 100644 --- a/src/sj4mkdic/char.c +++ b/src/sj4mkdic/char.c @@ -209,12 +209,13 @@ void output_knj(FILE* fp, u_char* p, int l) { } #ifdef UTF8 - to[TO(to, euc, strlen(euc))] = 0; + if(fp == stdout || fp == stderr) { + to[TO(to, euc, strlen(euc))] = 0; - fputs(to, fp); -#else - fputs(euc, fp); + fputs(to, fp); + } else #endif + fputs(euc, fp); } void output_str(FILE* fp, char* p) { @@ -302,15 +303,18 @@ void output_yomi(FILE* fp, u_char* p) { i = yomi2zen(*p++); #ifdef UTF8 - euc[0] = (i >> 8) & 0xff; - euc[1] = i & 0xff; + if(fp == stdout || fp == stderr) { + euc[0] = (i >> 8) & 0xff; + euc[1] = i & 0xff; - to[TO(to, euc, 2)] = 0; + to[TO(to, euc, 2)] = 0; - fputs(to, fp); -#else - fputc((i >> 8) & 0xff, fp); - fputc(i & 0xff, fp); + fputs(to, fp); + } else #endif + { + fputc((i >> 8) & 0xff, fp); + fputc(i & 0xff, fp); + } } } diff --git a/src/sj4mkdic/readline.c b/src/sj4mkdic/readline.c index 74269ee..7af19d0 100644 --- a/src/sj4mkdic/readline.c +++ b/src/sj4mkdic/readline.c @@ -110,8 +110,6 @@ readchar() { } if((cod = unicode_to_eucjp(n)) == -1) { - code = n; - return '['; } @@ -156,6 +154,8 @@ skip_blank() { return c; } +#include "sj_charset.h" + static int readhinsi() { static int c = 0; @@ -175,8 +175,6 @@ retry: } for(i = 0; !Isblank(c);) { - int j = 0, k; - if(c == '\n' || c == ':') break; if(Isillegal(c)) diff --git a/src/sj4test/main.c b/src/sj4test/main.c index 50d264c..e5b07ad 100644 --- a/src/sj4test/main.c +++ b/src/sj4test/main.c @@ -8,6 +8,7 @@ #else #define CHARSET SJ4UTF8 #endif +#define CHARSET SJ4UTF8 int main(int argc, char** argv) { char c[8 * 1024]; @@ -39,7 +40,11 @@ int main(int argc, char** argv) { while((strlen(c) - i) > 0 && (n = sj4_getkan(ctx, c + i, strlen(c + i), &kouho)) != 0) { printf(">"); do { +#ifdef _WIN32 + printf(" %s", kouho.buffer.sjis); +#else printf(" %s", kouho.buffer.utf8); +#endif } while(sj4_nextkan(ctx) != 0); printf("\n");