support ChinaSea extension for Traditional Chinese TTF output

This commit is contained in:
Wengier
2021-11-14 02:38:33 -05:00
parent 683705ffa4
commit beec41eef1
8 changed files with 4466 additions and 15 deletions

View File

@@ -33,6 +33,12 @@
output is selected for new installations. (Wengier)
- Added ability to change floppy images with drive
number (0 or 1) only. (Wengier)
- Added config option "chinasea" (in [ttf] section)
which when set to true allows ChinaSea (中國海字集)
extension of the Big5 charset for the Traditional
Chinese TTF output (requiring a TTF font supporting
the ChinaSea code points). Also moved "gbk" config
option from [dosv] to [ttf] section. (Wengier)
- Added code to INT 18h emulation (IBM PC mode) to
jump to ROM BASIC if the user provided an IBM
ROM BASIC image to load. (joncampbell123)

View File

@@ -692,7 +692,6 @@ pc-98 anex86 font =
# fontxdbcs24: FONTX2 file used to rendering SBCS characters (24x24) in DOS/V mode (with V-text and 24-pixel fonts enabled).
# For Simplified Chinese DOS/V, loading the HZK24? font file (https://github.com/aguegu/BitmapFont/tree/master/font) is also supported.
# For Traditional Chinese DOS/V, loading the STDFONT.24 font file from the ETen Chinese DOS system is also supported.
# gbk: Enables the GBK extension (in addition to the standard GB2312 charset) for the Simplified Chinese DOS/V emulation or TTF output.
# yen: Enables the Japanese yen symbol at 5ch if it is found at 7fh in a custom SBCS font for the Japanese DOS/V or JEGA emulation.
# del: Maps the undefined del symbol (0x7F) to the next character (0x80) for the Japanese DOS/V and other Japanese mode emulations.
# fepcontrol: FEP control API for the DOS/V emulation.
@@ -710,7 +709,6 @@ fontxsbcs24 =
fontxdbcs =
fontxdbcs14 =
fontxdbcs24 =
gbk = false
yen = false
del = true
fepcontrol = both
@@ -1166,6 +1164,8 @@ auxdevice = intellimouse
#DOSBOX-X-ADV:# halfwidthkana: If set, DOSBox-X enables half-width Katakana to replace upper ASCII characters for the Japanese code page (932) of a non-PC98 machine type in the TTF output.
# blinkc: If set to true, the cursor blinks for the TTF output; setting it to false will turn the blinking off.
# You can also change the blinking rate by setting an integer between 1 (fastest) and 7 (slowest), or 0 for no cursor.
# gbk: Enables the GBK extension (in addition to the standard GB2312 charset) for the Simplified Chinese TTF output or DOS/V emulation.
# chinasea: Enables the ChinaSea extension (in addition to the standard Big5 charset) for the Traditional Chinese TTF output or DOS/V emulation.
# dosvfunc: If set, enables FEP control to function for Japanese DOS/V applications, and changes the blinking of character attributes to high brightness.
#DOSBOX-X-ADV-SEE:#
#DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details):
@@ -1195,6 +1195,8 @@ autodbcs = true
#DOSBOX-X-ADV:autoboxdraw = true
#DOSBOX-X-ADV:halfwidthkana = true
blinkc = true
gbk = false
chinasea = false
dosvfunc = false
[voodoo]

View File

@@ -327,7 +327,6 @@ pc-98 anex86 font =
# fontxdbcs24: FONTX2 file used to rendering SBCS characters (24x24) in DOS/V mode (with V-text and 24-pixel fonts enabled).
# For Simplified Chinese DOS/V, loading the HZK24? font file (https://github.com/aguegu/BitmapFont/tree/master/font) is also supported.
# For Traditional Chinese DOS/V, loading the STDFONT.24 font file from the ETen Chinese DOS system is also supported.
# gbk: Enables the GBK extension (in addition to the standard GB2312 charset) for the Simplified Chinese DOS/V emulation or TTF output.
# yen: Enables the Japanese yen symbol at 5ch if it is found at 7fh in a custom SBCS font for the Japanese DOS/V or JEGA emulation.
# del: Maps the undefined del symbol (0x7F) to the next character (0x80) for the Japanese DOS/V and other Japanese mode emulations.
# fepcontrol: FEP control API for the DOS/V emulation.
@@ -345,7 +344,6 @@ fontxsbcs24 =
fontxdbcs =
fontxdbcs14 =
fontxdbcs24 =
gbk = false
yen = false
del = true
fepcontrol = both
@@ -487,6 +485,8 @@ auxdevice = intellimouse
# This applies to both the display and printing of these characters (see the [printer] section for details of the latter).
# blinkc: If set to true, the cursor blinks for the TTF output; setting it to false will turn the blinking off.
# You can also change the blinking rate by setting an integer between 1 (fastest) and 7 (slowest), or 0 for no cursor.
# gbk: Enables the GBK extension (in addition to the standard GB2312 charset) for the Simplified Chinese TTF output or DOS/V emulation.
# chinasea: Enables the ChinaSea extension (in addition to the standard Big5 charset) for the Traditional Chinese TTF output or DOS/V emulation.
# dosvfunc: If set, enables FEP control to function for Japanese DOS/V applications, and changes the blinking of character attributes to high brightness.
#
# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details):
@@ -511,6 +511,8 @@ strikeout = false
printfont = true
autodbcs = true
blinkc = true
gbk = false
chinasea = false
dosvfunc = false
[voodoo]

View File

@@ -672,7 +672,6 @@ pc-98 show graphics layer on initialize = true
# fontxdbcs24: FONTX2 file used to rendering SBCS characters (24x24) in DOS/V mode (with V-text and 24-pixel fonts enabled).
# For Simplified Chinese DOS/V, loading the HZK24? font file (https://github.com/aguegu/BitmapFont/tree/master/font) is also supported.
# For Traditional Chinese DOS/V, loading the STDFONT.24 font file from the ETen Chinese DOS system is also supported.
# gbk: Enables the GBK extension (in addition to the standard GB2312 charset) for the Simplified Chinese DOS/V emulation or TTF output.
# yen: Enables the Japanese yen symbol at 5ch if it is found at 7fh in a custom SBCS font for the Japanese DOS/V or JEGA emulation.
# del: Maps the undefined del symbol (0x7F) to the next character (0x80) for the Japanese DOS/V and other Japanese mode emulations.
# fepcontrol: FEP control API for the DOS/V emulation.
@@ -690,7 +689,6 @@ fontxsbcs24 =
fontxdbcs =
fontxdbcs14 =
fontxdbcs24 =
gbk = false
yen = false
del = true
fepcontrol = both
@@ -1138,6 +1136,8 @@ auxdevice = intellimouse
# halfwidthkana: If set, DOSBox-X enables half-width Katakana to replace upper ASCII characters for the Japanese code page (932) of a non-PC98 machine type in the TTF output.
# blinkc: If set to true, the cursor blinks for the TTF output; setting it to false will turn the blinking off.
# You can also change the blinking rate by setting an integer between 1 (fastest) and 7 (slowest), or 0 for no cursor.
# gbk: Enables the GBK extension (in addition to the standard GB2312 charset) for the Simplified Chinese TTF output or DOS/V emulation.
# chinasea: Enables the ChinaSea extension (in addition to the standard Big5 charset) for the Traditional Chinese TTF output or DOS/V emulation.
# dosvfunc: If set, enables FEP control to function for Japanese DOS/V applications, and changes the blinking of character attributes to high brightness.
font =
fontbold =
@@ -1163,6 +1163,8 @@ autodbcs = true
autoboxdraw = true
halfwidthkana = true
blinkc = true
gbk = false
chinasea = false
dosvfunc = false
[voodoo]

File diff suppressed because it is too large Load Diff

View File

@@ -141,7 +141,7 @@ static host_cnv_char_t cpcnv_ltemp[4096];
static uint16_t ldid[256];
static std::string ldir[256];
static std::string hostname = "";
extern bool rsize, morelen, force_sfn, enable_share_exe;
extern bool rsize, morelen, force_sfn, enable_share_exe, chinasea;
extern bool isDBCSCP(), isKanji1(uint8_t chr), shiftjis_lead_byte(int c);
extern int lfn_filefind_handle, freesizecap, file_access_tries;
extern unsigned long totalc, freec;
@@ -518,6 +518,7 @@ bool CodePageHostToGuestUTF16(char *d/*CROSS_LEN*/,const uint16_t *s/*CROSS_LEN*
case 949:
return String_HOST_TO_DBCS_UTF16<uint16_t>(d,s,cp949_to_unicode_hitbl,cp949_to_unicode_raw,sizeof(cp949_to_unicode_raw)/sizeof(cp949_to_unicode_raw[0]));
case 950:
if (chinasea) return String_HOST_TO_DBCS_UTF16<uint16_t>(d,s,cp950sea_to_unicode_hitbl,cp950sea_to_unicode_raw,sizeof(cp950sea_to_unicode_raw)/sizeof(cp950sea_to_unicode_raw[0]));
return String_HOST_TO_DBCS_UTF16<uint16_t>(d,s,cp950_to_unicode_hitbl,cp950_to_unicode_raw,sizeof(cp950_to_unicode_raw)/sizeof(cp950_to_unicode_raw[0]));
case 1250:
return String_HOST_TO_SBCS_UTF16<uint16_t>(d,s,cp1250_to_unicode,sizeof(cp1250_to_unicode)/sizeof(cp1250_to_unicode[0]));
@@ -596,6 +597,7 @@ bool CodePageHostToGuestUTF8(char *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/) {
case 949:
return String_HOST_TO_DBCS_UTF8<uint16_t>(d,s,cp949_to_unicode_hitbl,cp949_to_unicode_raw,sizeof(cp949_to_unicode_raw)/sizeof(cp949_to_unicode_raw[0]));
case 950:
if (chinasea) return String_HOST_TO_DBCS_UTF8<uint16_t>(d,s,cp950sea_to_unicode_hitbl,cp950sea_to_unicode_raw,sizeof(cp950sea_to_unicode_raw)/sizeof(cp950sea_to_unicode_raw[0]));
return String_HOST_TO_DBCS_UTF8<uint16_t>(d,s,cp950_to_unicode_hitbl,cp950_to_unicode_raw,sizeof(cp950_to_unicode_raw)/sizeof(cp950_to_unicode_raw[0]));
case 1250:
return String_HOST_TO_SBCS_UTF8<uint16_t>(d,s,cp1250_to_unicode,sizeof(cp1250_to_unicode)/sizeof(cp1250_to_unicode[0]));
@@ -674,6 +676,7 @@ bool CodePageGuestToHostUTF16(uint16_t *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*
case 949:
return String_DBCS_TO_HOST_UTF16<uint16_t>(d,s,cp949_to_unicode_hitbl,cp949_to_unicode_raw,sizeof(cp949_to_unicode_raw)/sizeof(cp949_to_unicode_raw[0]));
case 950:
if (chinasea) return String_DBCS_TO_HOST_UTF16<uint16_t>(d,s,cp950sea_to_unicode_hitbl,cp950sea_to_unicode_raw,sizeof(cp950sea_to_unicode_raw)/sizeof(cp950sea_to_unicode_raw[0]));
return String_DBCS_TO_HOST_UTF16<uint16_t>(d,s,cp950_to_unicode_hitbl,cp950_to_unicode_raw,sizeof(cp950_to_unicode_raw)/sizeof(cp950_to_unicode_raw[0]));
case 1250:
return String_SBCS_TO_HOST_UTF16<uint16_t>(d,s,cp1250_to_unicode,sizeof(cp1250_to_unicode)/sizeof(cp1250_to_unicode[0]));
@@ -752,6 +755,7 @@ bool CodePageGuestToHostUTF8(char *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/) {
case 949:
return String_DBCS_TO_HOST_UTF8<uint16_t>(d,s,cp949_to_unicode_hitbl,cp949_to_unicode_raw,sizeof(cp949_to_unicode_raw)/sizeof(cp949_to_unicode_raw[0]));
case 950:
if (chinasea) return String_DBCS_TO_HOST_UTF8<uint16_t>(d,s,cp950sea_to_unicode_hitbl,cp950sea_to_unicode_raw,sizeof(cp950sea_to_unicode_raw)/sizeof(cp950sea_to_unicode_raw[0]));
return String_DBCS_TO_HOST_UTF8<uint16_t>(d,s,cp950_to_unicode_hitbl,cp950_to_unicode_raw,sizeof(cp950_to_unicode_raw)/sizeof(cp950_to_unicode_raw[0]));
case 1250:
return String_SBCS_TO_HOST_UTF8<uint16_t>(d,s,cp1250_to_unicode,sizeof(cp1250_to_unicode)/sizeof(cp1250_to_unicode[0]));

View File

@@ -139,13 +139,15 @@ extern bool VIDEO_BIOS_always_carry_14_high_font;
extern bool VIDEO_BIOS_always_carry_16_high_font;
extern bool VIDEO_BIOS_enable_CGA_8x8_second_half;
extern bool allow_more_than_640kb, del_flag;
extern bool sync_time, enableime, gbk;
extern bool sync_time, enableime;
extern int freesizecap;
extern unsigned int page;
uint32_t guest_msdos_LoL = 0;
uint16_t guest_msdos_mcb_chain = 0;
int boothax = BOOTHAX_NONE;
bool gbk = false;
bool chinasea = false;
bool jp_ega = false;
bool want_fm_towns = false;
@@ -1063,7 +1065,9 @@ void DOSBOX_RealInit() {
if (IS_DOSV) DOSV_SetConfig(dosv_section);
#endif
}
gbk = dosv_section->Get_bool("gbk");
Section_prop *ttf_section = static_cast<Section_prop *>(control->GetSection("ttf"));
gbk = ttf_section->Get_bool("gbk");
chinasea = ttf_section->Get_bool("chinasea");
dos.loaded_codepage = cp;
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11) && !defined(C_SDL2) && defined(SDL_DOSBOX_X_SPECIAL)
if (enableime && !control->opt_silent) {
@@ -2096,10 +2100,6 @@ void DOSBOX_SetupConfigSections(void) {
"For Traditional Chinese DOS/V, loading the STDFONT.24 font file from the ETen Chinese DOS system is also supported.");
Pstring->SetBasic(true);
Pbool = secprop->Add_bool("gbk",Property::Changeable::OnlyAtStart,false);
Pbool->Set_help("Enables the GBK extension (in addition to the standard GB2312 charset) for the Simplified Chinese DOS/V emulation or TTF output.");
Pbool->SetBasic(true);
Pbool = secprop->Add_bool("yen",Property::Changeable::OnlyAtStart,false);
Pbool->Set_help("Enables the Japanese yen symbol at 5ch if it is found at 7fh in a custom SBCS font for the Japanese DOS/V or JEGA emulation.");
Pbool->SetBasic(true);
@@ -2790,6 +2790,14 @@ void DOSBOX_SetupConfigSections(void) {
"You can also change the blinking rate by setting an integer between 1 (fastest) and 7 (slowest), or 0 for no cursor.");
Pstring->SetBasic(true);
Pbool = secprop->Add_bool("gbk",Property::Changeable::OnlyAtStart,false);
Pbool->Set_help("Enables the GBK extension (in addition to the standard GB2312 charset) for the Simplified Chinese TTF output or DOS/V emulation.");
Pbool->SetBasic(true);
Pbool = secprop->Add_bool("chinasea",Property::Changeable::OnlyAtStart,false);
Pbool->Set_help("Enables the ChinaSea extension (in addition to the standard Big5 charset) for the Traditional Chinese TTF output or DOS/V emulation.");
Pbool->SetBasic(true);
Pbool = secprop->Add_bool("dosvfunc", Property::Changeable::OnlyAtStart, false);
Pbool->Set_help("If set, enables FEP control to function for Japanese DOS/V applications, and changes the blinking of character attributes to high brightness.");
Pbool->SetBasic(true);

View File

@@ -108,8 +108,7 @@ static bool use20pixelfont;
extern bool autoboxdraw;
extern bool ttf_dosv;
#endif
bool gbk = false;
extern bool gbk;
bool del_flag = true;
bool yen_flag = false;
bool jfont_init = false;