--- nono/util/iasm/iasm.cpp 2026/04/29 17:04:49 1.1.1.2 +++ nono/util/iasm/iasm.cpp 2026/04/29 17:05:58 1.1.1.5 @@ -1,43 +1,18 @@ // // XM6i -// Copyright (C) 2012-2016 isaki@NetBSD.org +// Copyright (C) 2012-2016 Tetsuya Isaki // // 簡易アセンブラ // -#include -#include -#include +#include "header.h" +#include #include -#include -#include #include #include #include #include "iasm.h" -// OSX で iconv はちょっと置いておく -#if !defined(__APPLE__) -#define IASM_USE_iconv -#endif - -#if defined(IASM_USE_iconv) -#include -#elif defined(IASM_USE_wxWidgets) -#include -#include -#endif - -/* - * iconv(3) の第2引数は本来は char** だが (Linux)、 - * 歴史的経緯により const char** な環境もある (NetBSD、FreeBSD)。 - */ -#if defined(IASM_ICONV_CONST) -typedef const char **iconv_src_t; -#else -typedef char **iconv_src_t; -#endif - #define BUFSIZE (1024) #define D_INOUT (0x0001) /* 入出力のみ */ @@ -113,8 +88,8 @@ class EA { val = 0; size = 0; } - int type() const { return (mode >> 3) & 7; }; - int num() const { return (mode & 7); }; + int type() const { return (mode >> 3) & 7; } + int num() const { return (mode & 7); } }; /* 参照種別 */ @@ -527,20 +502,9 @@ const char *iocscall[] = { void usage(const char *progname) { -#if defined(_WIN32) - const char *conv = "Win32"; -#elif defined(IASM_USE_iconv) - const char *conv = "iconv"; -#elif defined(IASM_USE_wxWidgets) - const char *conv = "wxWidgets"; -#else - const char *conv = "none"; -#endif - fprintf(stderr, "usage: %s [-d] [-f ] []\n", progname); fprintf(stderr, " -f output format: c, binary\n"); - fprintf(stderr, "compile option: charset conversion '%s'\n", conv); exit(1); } @@ -1830,7 +1794,11 @@ output_ea(EA& ea) output_l(ea.val); break; case EA_IMMEDIATE: - output_bin(ea.val, ea.size); + if (ea.size == 4) { + output_l(ea.val); + } else { + output_w(ea.val); + } break; default: /* それ以外は何もしない */ @@ -2319,26 +2287,6 @@ parse_string(String& src) String convert_charset(String& src) { -#if defined(_WIN32) - /* - * Win32 API を使う - */ - int size; - WCHAR wsrc[BUFSIZE]; - char mdst[BUFSIZE]; - - /* まず(UTF-8の)ワイド文字列に変換 */ - size = MultiByteToWideChar(CP_UTF8, 0, src.c_str(), -1, NULL, 0); - MultiByteToWideChar(CP_UTF8, 0, src.c_str(), -1, wsrc, size); - - /* Shift_JIS のマルチバイト文字に変換 */ - size = WideCharToMultiByte(932, 0, wsrc, -1, NULL, 0, 0, NULL); - WideCharToMultiByte(932, 0, wsrc, -1, mdst, size, 0, NULL); - - String dst(mdst); - return dst; - -#elif defined(IASM_USE_iconv) /* * iconv(3) を使う */ @@ -2360,7 +2308,7 @@ convert_charset(String& src) memset(dstbuf, 0, sizeof(dstbuf)); dstptr = dstbuf; dstsize = sizeof(dstbuf); - r = iconv(cd, (iconv_src_t)&srcptr, &srcsize, &dstptr, &dstsize); + r = ICONV(cd, &srcptr, &srcsize, &dstptr, &dstsize); if (r == -1) { error("cannot conversion string: %s\n", srcptr); } @@ -2372,26 +2320,6 @@ convert_charset(String& src) String dst(dstbuf); return dst; - -#elif defined(IASM_USE_wxWidgets) - /* - * wxWidgets の wxCSConv を使う - */ - char buf[src.size() * 2]; /* 適当 */ - - wxString wstr(src.c_str(), wxConvUTF8); - wxCSConv conv(wxT("SHIFT_JIS")); - conv.WC2MB(buf, wstr.wc_str(), sizeof(buf)); - - String dst(buf); - return dst; - -#else - /* - * 文字コード変換ライブラリがない場合は何もしない - */ - return src; -#endif } /* デバッグ表示 (ap版) */