From fa790cdcbd9bfea4395215496602efca7c0874b3 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Thu, 4 Jul 2019 19:43:08 +0900 Subject: [PATCH] Fix MP command with ASCII characters --- src/cmdm.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/cmdm.c b/src/cmdm.c index 32f3d70..ef42795 100644 --- a/src/cmdm.c +++ b/src/cmdm.c @@ -60,9 +60,8 @@ void commandMP() { /* 指定の文字列を指定文字数だけ表示する(Xコマンドの桁数指定) */ int num1 = getCaliValue(); int num2 = getCaliValue(); - unsigned char bstr[3] = { 0x81,0x40,0x00 }; // white blank - int len = min(num2 * 2, v_strlen(num1 - 1)); - int blen = num2 * 2 - len; + const char bstr[3] = "\x81\x40"; // full-width whitespace + const char *src = v_str(num1 - 1); char *str = malloc(num2 * 2 + 1); if (NULL == str) { @@ -70,11 +69,18 @@ void commandMP() { } memset(str, 0, num2 * 2 + 1); - strncpy(str, v_str(num1 - 1), len); - while(blen) { - strcat(str, bstr); - blen -= 2; + + int chars = num2; + const char *p = src; + while (*p && chars > 0) { + p += CHECKSJIS1BYTE(*p) ? 2 : 1; + chars--; } + strncpy(str, src, p - src); + while (chars-- > 0) { + strcat(str, bstr); + } + sys_addMsg(str); DEBUG_COMMAND("MP %d,%d:\n",num1,num2);