Files
dosbox-x/experiments/iconv/ic4.cpp
Jonathan Campbell c44cf0ed90 full widechar support
2019-03-18 19:21:11 -07:00

133 lines
3.6 KiB
C++

#include "iconvpp.hpp"
using namespace std;
// borrowed from DOSLIB
#define THIS_IS_JAPANESE "\x82\xb1\x82\xea\x82\xcd\x93\xfa\x96\x7b\x8c\xea\x82\xc5\x82\xb7"/* UTF-8 to Shift-JIS of "これは日本語です" */
int main() {
IconvToW *x = IconvToW::create(/*FROM*/"SHIFT-JIS");
if (x == NULL) {
cerr << "Failed to create context" << endl;
return 1;
}
IconvFromW *fx = IconvFromW::create("UTF-8");
if (fx == NULL) {
cerr << "Failed to create context" << endl;
return 1;
}
{
wchar_t tmp[512];
const char *src = THIS_IS_JAPANESE;
x->set_src(src);
x->set_dest(tmp,sizeof(tmp)/sizeof(tmp[0]));
int err = x->string_convert();
if (err < 0) {
cerr << "Conversion failed, " << Iconv::errstring(err) << endl;
return 1;
}
cout << "Test 1: " << src << endl;
cout << " Res: " << fx->string_convert(tmp) << endl;
cout << " Read: " << x->get_src_last_read() << endl;
cout << " Wrote: " << x->get_dest_last_written() << endl;
x->finish();
}
{
std::wstring dst;
const char *src = THIS_IS_JAPANESE;
x->set_src(src);
int err = x->string_convert_dest(dst);
if (err < 0) {
cerr << "Conversion failed, " << Iconv::errstring(err) << endl;
return 1;
}
cout << "Test 1: " << src << endl;
cout << " Res: " << fx->string_convert(dst) << endl;
cout << " Read: " << x->get_src_last_read() << endl;
cout << " Wrote: " << x->get_dest_last_written() << endl;
}
{
wchar_t tmp[512];
const char *src = THIS_IS_JAPANESE;
x->set_dest(tmp,sizeof(tmp)/sizeof(tmp[0]));
int err = x->string_convert_src(src);
if (err < 0) {
cerr << "Conversion failed, " << Iconv::errstring(err) << endl;
return 1;
}
cout << "Test 1: " << src << endl;
cout << " Res: " << fx->string_convert(tmp) << endl;
cout << " Read: " << x->get_src_last_read() << endl;
cout << " Wrote: " << x->get_dest_last_written() << endl;
}
{
wchar_t tmp[512];
const std::string src = THIS_IS_JAPANESE;
x->set_dest(tmp,sizeof(tmp)/sizeof(tmp[0]));
int err = x->string_convert_src(src);
if (err < 0) {
cerr << "Conversion failed, " << Iconv::errstring(err) << endl;
return 1;
}
cout << "Test 1: " << src << endl;
cout << " Res: " << fx->string_convert(tmp) << endl;
cout << " Read: " << x->get_src_last_read() << endl;
cout << " Wrote: " << x->get_dest_last_written() << endl;
}
{
std::wstring dst;
const std::string src = THIS_IS_JAPANESE;
int err = x->string_convert(dst,src);
if (err < 0) {
cerr << "Conversion failed, " << Iconv::errstring(err) << endl;
return 1;
}
cout << "Test 1: " << src << endl;
cout << " Res: " << fx->string_convert(dst) << endl;
cout << " Read: " << x->get_src_last_read() << endl;
cout << " Wrote: " << x->get_dest_last_written() << endl;
}
{
const std::string src = THIS_IS_JAPANESE;
std::wstring dst = x->string_convert(src);
cout << "Test 1: " << src << endl;
cout << " Res: " << fx->string_convert(dst) << endl;
cout << " Read: " << x->get_src_last_read() << endl;
cout << " Wrote: " << x->get_dest_last_written() << endl;
}
delete fx;
delete x;
return 0;
}