[Scummvm-git-logs] scummvm master -> fe756f69219d91c2f2d84f9cb07d2ee24345cc9c
sev-
sev at scummvm.org
Fri Nov 6 18:35:17 UTC 2020
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
7a2a0542fc SCUMM: Support variation of Korean postpositions
fe756f6921 SCUMM: Optimize Korean final consonant table
Commit: 7a2a0542fc1351154140f7a85116c00f6de058b3
https://github.com/scummvm/scummvm/commit/7a2a0542fc1351154140f7a85116c00f6de058b3
Author: wonst719 (wonst719 at gmail.com)
Date: 2020-11-06T19:35:12+01:00
Commit Message:
SCUMM: Support variation of Korean postpositions
Changed paths:
A engines/scumm/ks_check.cpp
A engines/scumm/ks_check.h
engines/scumm/module.mk
engines/scumm/scumm.cpp
engines/scumm/scumm.h
engines/scumm/string.cpp
diff --git a/engines/scumm/ks_check.cpp b/engines/scumm/ks_check.cpp
new file mode 100644
index 0000000000..0829a452b4
--- /dev/null
+++ b/engines/scumm/ks_check.cpp
@@ -0,0 +1,123 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "scumm/ks_check.h"
+
+namespace Scumm {
+
+ // TODO: optimize table
+ static unsigned char TGConvTbl[] = {
+ 0x61, 0x62, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7b, 0x7c, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb5, 0xb7, 0xc1, 0xc5,
+ 0xc9, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xf8, 0xfb, 0xfc, 0xfd, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77,
+ 0x7b, 0x81, 0x85, 0x89, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xad, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xc1, 0xc2, 0xc5, 0xc9, 0xcb, 0xd1, 0xd3, 0xd5, 0xd7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf6, 0xf7, 0x41,
+ 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x90, 0x91, 0x93, 0x95, 0x97, 0x98, 0xa1, 0xa2, 0xa5, 0xa9, 0xb6, 0xb7, 0xc1, 0xd5, 0xe1, 0xe2,
+ 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0x41, 0x45, 0x49, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xbc, 0x61, 0x62, 0x63, 0x65,
+ 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa9, 0xe1, 0xe2, 0xe3, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x51, 0x55,
+ 0x57, 0x61, 0x65, 0x69, 0x75, 0x76, 0x7b, 0x81, 0xa1, 0xa2, 0xa5, 0xa7, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0xc1, 0xc2, 0xc9, 0xd6, 0xd7, 0xe1, 0xe2, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x53, 0x57, 0x61, 0x81,
+ 0x82, 0x85, 0x89, 0x90, 0x91, 0x93, 0x95, 0x97, 0x98, 0xa1, 0xa9, 0xb6, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd3, 0xd6, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0x41, 0x61, 0x62, 0x65, 0x67, 0x69, 0x6b, 0x70, 0x71, 0x73,
+ 0x75, 0x77, 0x7b, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7b, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+ 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb7, 0xe1, 0xe2, 0xe4, 0xe5, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71,
+ 0x73, 0x76, 0x77, 0x7a, 0x81, 0x85, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0xbd, 0xc1, 0xc5, 0xc9, 0xd6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x62, 0x65, 0x69, 0x73, 0x75, 0x77, 0x81,
+ 0x82, 0x85, 0x88, 0x89, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0x41, 0x42, 0x49, 0x51, 0x53, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7c, 0x81,
+ 0x85, 0x89, 0xa1, 0xa2, 0xa5, 0xa9, 0xaf, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x70, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91,
+ 0x93, 0x95, 0x96, 0x97, 0xa1, 0xe1, 0xe2, 0xe3, 0xe5, 0xe8, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfc, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x65, 0x69, 0x76, 0x77, 0x81, 0x85,
+ 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xad, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xbb, 0xc1, 0xc5, 0xc9, 0xe1, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6,
+ 0xc1, 0xd7, 0xe1, 0xe5, 0xe9, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb8,
+ 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49,
+ 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x76, 0xa1, 0xa2, 0xa5, 0xa9, 0xb7, 0xc1, 0xc9, 0xe1, 0x41, 0x45, 0x81, 0x82, 0x85, 0x89, 0x90, 0x91, 0x97, 0xc1, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0xf7, 0x61, 0x62, 0x65, 0x68,
+ 0x69, 0x71, 0x73, 0x75, 0x81, 0x85, 0x89, 0x91, 0x93, 0xa1, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x7c, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+ 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xb5, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81,
+ 0x85, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xd7, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+ 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7b, 0x7c, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
+ 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7b, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0x98, 0xa1, 0xa2, 0xa9, 0xb7, 0xe1, 0xe2, 0xe5,
+ 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x75, 0x76, 0x77, 0x79, 0x81, 0xa1, 0xa2, 0xa4, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5,
+ 0xb7, 0xc1, 0xc5, 0xd6, 0xd7, 0x41, 0x45, 0x49, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x83, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0x9b, 0x9d, 0xa1, 0xa5, 0xa9, 0xb3, 0xb5,
+ 0xc1, 0xe1, 0xe5, 0xe9, 0x41, 0x45, 0x49, 0x51, 0x55, 0x61, 0x65, 0x69, 0x71, 0x75, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb9, 0xbb, 0x61, 0x62, 0x63, 0x64, 0x65, 0x68, 0x69, 0x6a,
+ 0x6b, 0x6c, 0x71, 0x73, 0x75, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0x9b, 0xa1, 0xa2, 0xa5, 0xb3, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0x41, 0x42, 0x45,
+ 0x48, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x85, 0xa1, 0xa2, 0xa3, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xd6, 0xe1, 0xf6, 0x41, 0x42, 0x45,
+ 0x49, 0x51, 0x53, 0x61, 0x65, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0x9b, 0x9c, 0xa1, 0xa9, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62,
+ 0x65, 0x69, 0x71, 0x73, 0x75, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0x61, 0x62, 0x65, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96,
+ 0x97, 0xa1, 0xa2, 0xb1, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xf1, 0xf5, 0xf6, 0xf7, 0x41, 0x57, 0x61, 0x62, 0x71, 0x73, 0x75, 0x76, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb7, 0x41, 0x61, 0x77, 0x81, 0x82, 0x85,
+ 0x89, 0x91, 0x95, 0x97, 0x41, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x64, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82,
+ 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe8, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfc,
+ 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x85, 0x89, 0x97, 0xa1, 0xa2, 0xa3, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xc1, 0xc2,
+ 0xc5, 0xc9, 0xd7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf5, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x88, 0x89, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9b, 0x9c,
+ 0xa1, 0xb6, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8,
+ 0xa9, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0x61, 0x62, 0x64, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x96, 0x97, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf6, 0xf7,
+ 0x41, 0x45, 0x49, 0x57, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb7, 0xc1, 0xc2, 0xc5, 0xd6, 0xe1, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xb6, 0xc1,
+ 0xe1, 0xe5, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6b, 0x70, 0x71, 0x73, 0x81, 0x85, 0x89, 0x91, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x66, 0x67, 0x69, 0x6a, 0x6b, 0x70, 0x71, 0x73, 0x75,
+ 0x76, 0x77, 0x7b, 0x7c, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xac, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xbd, 0xc1, 0xc5, 0xc9, 0xd3, 0xe1, 0xe2, 0xe5, 0xe6, 0xe8, 0xe9, 0xea,
+ 0xeb, 0xf1, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfc, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x63, 0x65, 0x69, 0x6b, 0x6c, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x7b, 0x7c, 0x7d, 0x81,
+ 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0xa1, 0xa2, 0xa5, 0xa9, 0xaa, 0xab, 0xad, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd3, 0xd5, 0xd6, 0xd7, 0xe1, 0xe2, 0xe5, 0xf1, 0xf5, 0xf7, 0x41,
+ 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb6, 0xb7, 0xc1, 0xc2,
+ 0xc5, 0xc9, 0xd1, 0xd3, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x59, 0x61, 0x62, 0x65, 0x69, 0x6f, 0x71, 0x73, 0x75, 0x77, 0x78, 0x79, 0x7a, 0x7b,
+ 0x7c, 0x7d, 0x81, 0x85, 0x89, 0x91, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xaa, 0xab, 0xb0, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb8, 0xbc, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x81,
+ 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa7, 0xa9, 0xb1, 0xb7, 0xc1, 0xc5, 0xc9, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55,
+ 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0xbd, 0xc1, 0xc2, 0xc9, 0xd3, 0xd5, 0xd7, 0xe1, 0xf6, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x53,
+ 0x55, 0x57, 0x61, 0x62, 0x65, 0x77, 0x81, 0x82, 0x85, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0x41, 0x45, 0x49, 0x51, 0x61, 0x62, 0x65, 0x69, 0x71,
+ 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xbb, 0xbc, 0x61, 0x62, 0x65, 0x67, 0x69, 0x6c, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96,
+ 0x97, 0xa1, 0xa5, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x57, 0x61, 0x76, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xc1, 0xc2, 0xc9, 0xd6, 0xe1, 0xf6, 0x41, 0x45, 0x49,
+ 0x51, 0x53, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xb6, 0xb7, 0xe1, 0x41, 0x61, 0x71, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb7, 0xb8, 0xbd, 0x61, 0x62, 0x65, 0x67, 0x69, 0x71, 0x73,
+ 0x75, 0x76, 0x77, 0x78, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa5, 0xa7, 0xa9, 0xb1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55,
+ 0x57, 0x61, 0x65, 0x76, 0x81, 0x85, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xc9, 0xd7, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x71, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+ 0x97, 0xa1, 0xb6, 0xc1, 0xc5, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xaa, 0xb1, 0xb3, 0xb5, 0xb7,
+ 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xb7, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51,
+ 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xf7, 0x41, 0x49, 0x61, 0x81, 0x82, 0x85, 0x89,
+ 0x91, 0x93, 0x95, 0x97, 0xa1, 0xa5, 0xa9, 0xb7, 0xc1, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3,
+ 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42,
+ 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x76, 0x81, 0x85, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0xc1, 0xc5, 0xe1, 0x41, 0x45, 0x55, 0x57, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
+ 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x81, 0x85, 0x89, 0x91, 0x93, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
+ 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x63, 0x65, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7,
+ 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x81, 0x89, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xd7, 0x41, 0x45, 0x61, 0x65, 0x69, 0x73,
+ 0x75, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf5, 0x41, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x75, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
+ 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x6e, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45,
+ 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x85, 0x89, 0x93, 0xa1, 0xa2, 0xa5, 0xa9, 0xae, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xc1, 0xc2, 0xc5, 0xc9, 0xd5, 0xd7, 0xe1,
+ 0xe2, 0xe5, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x85, 0x89, 0x8e, 0x91, 0x95, 0x97, 0xa1, 0xa5, 0xa9, 0xb1, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd7, 0xe1,
+ 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0x7b, 0x81, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xa2, 0xa5,
+ 0xa9, 0xb1, 0xb3, 0xb5, 0xb7,
+ };
+
+ // final consonant table
+ const char JongsungTbl[32] = { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0 };
+
+ int checkHangul(byte hi, byte lo)
+ {
+ // hi: xx
+ // lo: yy
+ if ((0xA1 > lo) || (0xFE < lo)) {
+ return 0;
+ }
+ if ((hi >= 0xB0) && (hi <= 0xC8)) {
+ return 1;
+ }
+ return 0;
+ }
+
+ // check for jongsung (final consonant)
+ byte checkJongsung(byte hi, byte lo)
+ {
+ uint16 index = ((hi - 0xb0) * 94 + lo - 0xa1);
+
+ return JongsungTbl[TGConvTbl[index] & 0x1F];
+ }
+
+} // End of namespace Scumm
diff --git a/engines/scumm/ks_check.h b/engines/scumm/ks_check.h
new file mode 100644
index 0000000000..289fbcc4f6
--- /dev/null
+++ b/engines/scumm/ks_check.h
@@ -0,0 +1,35 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef SCUMM_KS_CEHCK_H
+#define SCUMM_KS_CEHCK_H
+
+#include "common/scummsys.h"
+
+namespace Scumm {
+
+ int checkHangul(byte hi, byte lo);
+ byte checkJongsung(byte hi, byte lo);
+
+} // End of namespace Scumm
+
+#endif
diff --git a/engines/scumm/module.mk b/engines/scumm/module.mk
index 8f82add778..b12597be23 100644
--- a/engines/scumm/module.mk
+++ b/engines/scumm/module.mk
@@ -34,6 +34,7 @@ MODULE_OBJS := \
imuse/drivers/mac_m68k.o \
imuse/drivers/pcspk.o \
input.o \
+ ks_check.o \
metaengine.o \
midiparser_ro.o \
object.o \
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 08759d67ea..d28b7fe6c8 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -324,6 +324,7 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
_costumeLoader = NULL;
_costumeRenderer = NULL;
_2byteFontPtr = 0;
+ _krStrPost = 0;
_V1TalkingActor = 0;
for (int i = 0; i < 20; i++)
_2byteMultiFontPtr[i] = NULL;
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index cb5ab69ea6..afc91eca12 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -1144,6 +1144,7 @@ public:
int _2byteHeight;
int _2byteWidth;
+ int _krStrPost;
byte _newLineCharacter;
byte *get2byteCharPtr(int idx);
diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp
index 322731e800..ec15902fee 100644
--- a/engines/scumm/string.cpp
+++ b/engines/scumm/string.cpp
@@ -40,6 +40,8 @@
#include "scumm/verbs.h"
#include "scumm/he/sound_he.h"
+#include "scumm/ks_check.h"
+
namespace Scumm {
@@ -1398,13 +1400,76 @@ int ScummEngine::convertIntMessage(byte *dst, int dstSize, int var) {
int ScummEngine::convertVerbMessage(byte *dst, int dstSize, int var) {
int num, k;
+ bool isKorVerbGlue = false;
+
+ if (_language == Common::KO_KOR && _useCJKMode && var & (1 << 15)) {
+ isKorVerbGlue = true;
+ var &= ~(1 << 15);
+ }
+
num = readVar(var);
if (num) {
for (k = 1; k < _numVerbs; k++) {
// Fix ZAK FM-TOWNS bug #1013617 by emulating exact (inconsistant?) behavior of the original code
if (num == _verbs[k].verbid && !_verbs[k].type && (!_verbs[k].saveid || (_game.version == 3 && _game.platform == Common::kPlatformFMTowns))) {
- const byte *ptr = getResourceAddress(rtVerb, k);
- return convertMessageToString(ptr, dst, dstSize);
+ if (isKorVerbGlue) {
+ static const byte code0380[4] = {0xFF, 0x07, 0x03, 0x80}; // "eul/reul"
+ static const byte code0480[4] = {0xFF, 0x07, 0x04, 0x80}; // "wa/gwa"
+ static const byte codeWalkTo[9] = {0xFF, 0x07, 0x03, 0x80, 0x20, 0xC7, 0xE2, 0xC7, 0xD8}; // "eul/reul hyang-hae"
+ byte _transText[10];
+ memset(_transText, 0, sizeof(_transText));
+ // WORKAROUND: MI Korean verb parser
+ if (_game.id == GID_MONKEY_VGA) {
+ switch (_verbs[k].verbid) {
+ case 1: // Open
+ case 2: // Close
+ case 3: // Give
+ case 4: // Turn on
+ case 5: // Turn off
+ case 6: // Push
+ case 7: // Pull
+ case 8: // Use
+ case 9: // Look at
+ case 10: // Walk to
+ memcpy(_transText, codeWalkTo, 9);
+ break;
+ case 11: // Pick up
+ memcpy(_transText, code0380, 4);
+ break;
+ case 13: // Talk to
+ memcpy(_transText, code0480, 4);
+ break;
+ }
+ return convertMessageToString(_transText, dst, dstSize);
+ }
+ // WORKAROUND: MI2 Korean verb parser
+ if (_game.id == GID_MONKEY2) {
+ if (_verbs[k].verbid <= 11) {
+ switch (_verbs[k].verbid) {
+ case 2: // Open
+ case 3: // Close
+ case 4: // Give
+ case 5: // Push
+ case 6: // Pull
+ case 7: // Use
+ case 8: // Look at
+ case 9: // Pick up
+ memcpy(_transText, code0380, 4);
+ break;
+ case 10: // Talk to
+ memcpy(_transText, code0480, 4);
+ break;
+ case 11: // Walk to
+ memcpy(_transText, codeWalkTo, 9);
+ break;
+ }
+ return convertMessageToString(_transText, dst, dstSize);
+ }
+ }
+ } else {
+ const byte *ptr = getResourceAddress(rtVerb, k);
+ return convertMessageToString(ptr, dst, dstSize);
+ }
}
}
}
@@ -1418,7 +1483,26 @@ int ScummEngine::convertNameMessage(byte *dst, int dstSize, int var) {
if (num) {
const byte *ptr = getObjOrActorName(num);
if (ptr) {
- return convertMessageToString(ptr, dst, dstSize);
+ int increment = convertMessageToString(ptr, dst, dstSize);
+ if (_language == Common::KO_KOR && _useCJKMode) {
+ _krStrPost = 0;
+ int len = resStrLen(ptr);
+ if (len >= 2) {
+ for (int i = len; i > 1; i--) {
+ byte k1 = ptr[i - 2];
+ byte k2 = ptr[i - 1];
+ if (checkHangul(k1, k2)) {
+ int jongsung = checkJongsung(k1, k2);
+ if (jongsung)
+ _krStrPost |= 1;
+ if (jongsung == 8) // 'ri-eul' final consonant
+ _krStrPost |= (1 << 1);
+ break;
+ }
+ }
+ }
+ }
+ return increment;
}
}
return 0;
@@ -1443,10 +1527,42 @@ int ScummEngine::convertStringMessage(byte *dst, int dstSize, int var) {
if (_game.version == 3 || (_game.version >= 6 && _game.heversion < 72))
var = readVar(var);
- if (var) {
+ if (_language == Common::KO_KOR && _useCJKMode && (var & (1 << 15))) {
+ int idx;
+ static const byte codeIdx[] = {0x00, 0x00, 0xC0, 0xB8, 0x00, 0x00, 0xC0, 0xCC, 0xB0, 0xA1, 0xC0, 0xCC, 0xB8, 0xA6, 0xC0, 0xBB, 0xBF, 0xCD, 0xB0, 0xFA, 0xB4, 0xC2, 0xC0, 0xBA};
+
+ if ((var & ~(1 << 15)) == 0)
+ idx = (2 * (var & ~(1 << 15)) + (_krStrPost & 1) - bool(_krStrPost & 2)) * 2;
+ else
+ idx = (2 * (var & ~(1 << 15)) + (_krStrPost & 1)) * 2;
+
+ byte _transText[3];
+ const byte byteIdx[] = {codeIdx[idx], codeIdx[idx + 1]};
+
+ memset(_transText, 0, sizeof(_transText));
+ memcpy(_transText, byteIdx, 2);
+
+ return convertMessageToString(_transText, dst, dstSize);
+ } else if (var) {
ptr = getStringAddress(var);
if (ptr) {
- return convertMessageToString(ptr, dst, dstSize);
+ int increment = convertMessageToString(ptr, dst, dstSize);
+ if (_language == Common::KO_KOR && _useCJKMode) {
+ _krStrPost = 0;
+ for (int i = resStrLen(ptr); i > 1; i--) {
+ byte k1 = ptr[i - 2];
+ byte k2 = ptr[i - 1];
+ if (checkHangul(k1, k2)) {
+ int jongsung = checkJongsung(k1, k2);
+ if (jongsung)
+ _krStrPost |= 1;
+ if (jongsung == 8) // 'ri-eul' final consonant
+ _krStrPost |= (1 << 1);
+ break;
+ }
+ }
+ }
+ return increment;
}
}
return 0;
Commit: fe756f69219d91c2f2d84f9cb07d2ee24345cc9c
https://github.com/scummvm/scummvm/commit/fe756f69219d91c2f2d84f9cb07d2ee24345cc9c
Author: wonst719 (wonst719 at gmail.com)
Date: 2020-11-06T19:35:12+01:00
Commit Message:
SCUMM: Optimize Korean final consonant table
Changed paths:
engines/scumm/ks_check.cpp
diff --git a/engines/scumm/ks_check.cpp b/engines/scumm/ks_check.cpp
index 0829a452b4..5024b03352 100644
--- a/engines/scumm/ks_check.cpp
+++ b/engines/scumm/ks_check.cpp
@@ -23,101 +23,175 @@
#include "scumm/ks_check.h"
namespace Scumm {
-
- // TODO: optimize table
- static unsigned char TGConvTbl[] = {
- 0x61, 0x62, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7b, 0x7c, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb5, 0xb7, 0xc1, 0xc5,
- 0xc9, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xf8, 0xfb, 0xfc, 0xfd, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77,
- 0x7b, 0x81, 0x85, 0x89, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xad, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xc1, 0xc2, 0xc5, 0xc9, 0xcb, 0xd1, 0xd3, 0xd5, 0xd7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf6, 0xf7, 0x41,
- 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x90, 0x91, 0x93, 0x95, 0x97, 0x98, 0xa1, 0xa2, 0xa5, 0xa9, 0xb6, 0xb7, 0xc1, 0xd5, 0xe1, 0xe2,
- 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0x41, 0x45, 0x49, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xbc, 0x61, 0x62, 0x63, 0x65,
- 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa9, 0xe1, 0xe2, 0xe3, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x51, 0x55,
- 0x57, 0x61, 0x65, 0x69, 0x75, 0x76, 0x7b, 0x81, 0xa1, 0xa2, 0xa5, 0xa7, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0xc1, 0xc2, 0xc9, 0xd6, 0xd7, 0xe1, 0xe2, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x53, 0x57, 0x61, 0x81,
- 0x82, 0x85, 0x89, 0x90, 0x91, 0x93, 0x95, 0x97, 0x98, 0xa1, 0xa9, 0xb6, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd3, 0xd6, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0x41, 0x61, 0x62, 0x65, 0x67, 0x69, 0x6b, 0x70, 0x71, 0x73,
- 0x75, 0x77, 0x7b, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7b, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
- 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb7, 0xe1, 0xe2, 0xe4, 0xe5, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71,
- 0x73, 0x76, 0x77, 0x7a, 0x81, 0x85, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0xbd, 0xc1, 0xc5, 0xc9, 0xd6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x62, 0x65, 0x69, 0x73, 0x75, 0x77, 0x81,
- 0x82, 0x85, 0x88, 0x89, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0x41, 0x42, 0x49, 0x51, 0x53, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7c, 0x81,
- 0x85, 0x89, 0xa1, 0xa2, 0xa5, 0xa9, 0xaf, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0x61, 0x62, 0x63, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x70, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91,
- 0x93, 0x95, 0x96, 0x97, 0xa1, 0xe1, 0xe2, 0xe3, 0xe5, 0xe8, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfc, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x65, 0x69, 0x76, 0x77, 0x81, 0x85,
- 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xad, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xbb, 0xc1, 0xc5, 0xc9, 0xe1, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6,
- 0xc1, 0xd7, 0xe1, 0xe5, 0xe9, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb8,
- 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49,
- 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x76, 0xa1, 0xa2, 0xa5, 0xa9, 0xb7, 0xc1, 0xc9, 0xe1, 0x41, 0x45, 0x81, 0x82, 0x85, 0x89, 0x90, 0x91, 0x97, 0xc1, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0xf7, 0x61, 0x62, 0x65, 0x68,
- 0x69, 0x71, 0x73, 0x75, 0x81, 0x85, 0x89, 0x91, 0x93, 0xa1, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x7c, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
- 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xb5, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81,
- 0x85, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xd7, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
- 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7b, 0x7c, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
- 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x77, 0x78, 0x7b, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0x98, 0xa1, 0xa2, 0xa9, 0xb7, 0xe1, 0xe2, 0xe5,
- 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0xfd, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x75, 0x76, 0x77, 0x79, 0x81, 0xa1, 0xa2, 0xa4, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5,
- 0xb7, 0xc1, 0xc5, 0xd6, 0xd7, 0x41, 0x45, 0x49, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x83, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0x9b, 0x9d, 0xa1, 0xa5, 0xa9, 0xb3, 0xb5,
- 0xc1, 0xe1, 0xe5, 0xe9, 0x41, 0x45, 0x49, 0x51, 0x55, 0x61, 0x65, 0x69, 0x71, 0x75, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb9, 0xbb, 0x61, 0x62, 0x63, 0x64, 0x65, 0x68, 0x69, 0x6a,
- 0x6b, 0x6c, 0x71, 0x73, 0x75, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0x9b, 0xa1, 0xa2, 0xa5, 0xb3, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0x41, 0x42, 0x45,
- 0x48, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x85, 0xa1, 0xa2, 0xa3, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xd6, 0xe1, 0xf6, 0x41, 0x42, 0x45,
- 0x49, 0x51, 0x53, 0x61, 0x65, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0x9b, 0x9c, 0xa1, 0xa9, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62,
- 0x65, 0x69, 0x71, 0x73, 0x75, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0x61, 0x62, 0x65, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96,
- 0x97, 0xa1, 0xa2, 0xb1, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xf1, 0xf5, 0xf6, 0xf7, 0x41, 0x57, 0x61, 0x62, 0x71, 0x73, 0x75, 0x76, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb7, 0x41, 0x61, 0x77, 0x81, 0x82, 0x85,
- 0x89, 0x91, 0x95, 0x97, 0x41, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x64, 0x65, 0x68, 0x69, 0x6a, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82,
- 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe8, 0xe9, 0xeb, 0xec, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0xfc,
- 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x56, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x85, 0x89, 0x97, 0xa1, 0xa2, 0xa3, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xc1, 0xc2,
- 0xc5, 0xc9, 0xd7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf5, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x88, 0x89, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9b, 0x9c,
- 0xa1, 0xb6, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8,
- 0xa9, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0x61, 0x62, 0x64, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x7d, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x96, 0x97, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf6, 0xf7,
- 0x41, 0x45, 0x49, 0x57, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb7, 0xc1, 0xc2, 0xc5, 0xd6, 0xe1, 0xf6, 0x41, 0x45, 0x49, 0x51, 0x53, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xb6, 0xc1,
- 0xe1, 0xe5, 0x57, 0x61, 0x62, 0x65, 0x69, 0x6b, 0x70, 0x71, 0x73, 0x81, 0x85, 0x89, 0x91, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x66, 0x67, 0x69, 0x6a, 0x6b, 0x70, 0x71, 0x73, 0x75,
- 0x76, 0x77, 0x7b, 0x7c, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xac, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xbd, 0xc1, 0xc5, 0xc9, 0xd3, 0xe1, 0xe2, 0xe5, 0xe6, 0xe8, 0xe9, 0xea,
- 0xeb, 0xf1, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfc, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x63, 0x65, 0x69, 0x6b, 0x6c, 0x71, 0x73, 0x74, 0x75, 0x76, 0x77, 0x7b, 0x7c, 0x7d, 0x81,
- 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0xa1, 0xa2, 0xa5, 0xa9, 0xaa, 0xab, 0xad, 0xb0, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd3, 0xd5, 0xd6, 0xd7, 0xe1, 0xe2, 0xe5, 0xf1, 0xf5, 0xf7, 0x41,
- 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb6, 0xb7, 0xc1, 0xc2,
- 0xc5, 0xc9, 0xd1, 0xd3, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x59, 0x61, 0x62, 0x65, 0x69, 0x6f, 0x71, 0x73, 0x75, 0x77, 0x78, 0x79, 0x7a, 0x7b,
- 0x7c, 0x7d, 0x81, 0x85, 0x89, 0x91, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xaa, 0xab, 0xb0, 0xb1, 0xb3, 0xb5, 0xb6, 0xb7, 0xb8, 0xbc, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x78, 0x81,
- 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xa5, 0xa7, 0xa9, 0xb1, 0xb7, 0xc1, 0xc5, 0xc9, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55,
- 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xb9, 0xbd, 0xc1, 0xc2, 0xc9, 0xd3, 0xd5, 0xd7, 0xe1, 0xf6, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x53,
- 0x55, 0x57, 0x61, 0x62, 0x65, 0x77, 0x81, 0x82, 0x85, 0x89, 0x8a, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0x41, 0x45, 0x49, 0x51, 0x61, 0x62, 0x65, 0x69, 0x71,
- 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xab, 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xbb, 0xbc, 0x61, 0x62, 0x65, 0x67, 0x69, 0x6c, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96,
- 0x97, 0xa1, 0xa5, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x57, 0x61, 0x76, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xb9, 0xc1, 0xc2, 0xc9, 0xd6, 0xe1, 0xf6, 0x41, 0x45, 0x49,
- 0x51, 0x53, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xb6, 0xb7, 0xe1, 0x41, 0x61, 0x71, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb7, 0xb8, 0xbd, 0x61, 0x62, 0x65, 0x67, 0x69, 0x71, 0x73,
- 0x75, 0x76, 0x77, 0x78, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa5, 0xa7, 0xa9, 0xb1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55,
- 0x57, 0x61, 0x65, 0x76, 0x81, 0x85, 0x97, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc5, 0xc9, 0xd7, 0x41, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x71, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
- 0x97, 0xa1, 0xb6, 0xc1, 0xc5, 0xe1, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, 0xaa, 0xb1, 0xb3, 0xb5, 0xb7,
- 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xb7, 0xe1, 0xe2, 0xe5, 0xe8, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51,
- 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd1, 0xd7, 0xe1, 0xf7, 0x41, 0x49, 0x61, 0x81, 0x82, 0x85, 0x89,
- 0x91, 0x93, 0x95, 0x97, 0xa1, 0xa5, 0xa9, 0xb7, 0xc1, 0xd7, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x77, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3,
- 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7, 0x41, 0x42,
- 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x76, 0x81, 0x85, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xbc, 0xc1, 0xc5, 0xe1, 0x41, 0x45, 0x55, 0x57, 0x61, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95,
- 0x97, 0xa1, 0xb6, 0xc1, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf7, 0x41, 0x45, 0x49, 0x51, 0x57, 0x61, 0x62, 0x65, 0x68, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x81, 0x85, 0x89, 0x91, 0x93, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
- 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x63, 0x65, 0x69, 0x6b, 0x71, 0x73, 0x75, 0x76, 0x77, 0x7b, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xa2, 0xe1, 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf6, 0xf7,
- 0x41, 0x42, 0x45, 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x76, 0x77, 0x81, 0x89, 0x93, 0x95, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1, 0xb3, 0xb5, 0xb7, 0xc1, 0xd7, 0x41, 0x45, 0x61, 0x65, 0x69, 0x73,
- 0x75, 0x81, 0x82, 0x85, 0x88, 0x89, 0x8b, 0x91, 0x93, 0x95, 0x97, 0xa1, 0xb7, 0xe1, 0xe5, 0xe9, 0xf1, 0xf5, 0x41, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x65, 0x69, 0x71, 0x73, 0x75, 0xa1, 0xa2, 0xa5, 0xa9, 0xb1,
- 0xb3, 0xb5, 0xb7, 0x61, 0x62, 0x65, 0x69, 0x6e, 0x71, 0x73, 0x75, 0x77, 0x81, 0x82, 0x85, 0x89, 0x91, 0x93, 0x95, 0x96, 0x97, 0xa1, 0xb7, 0xe1, 0xe2, 0xe5, 0xe9, 0xeb, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45,
- 0x49, 0x51, 0x53, 0x55, 0x57, 0x61, 0x62, 0x65, 0x69, 0x71, 0x73, 0x75, 0x76, 0x77, 0x81, 0x85, 0x89, 0x93, 0xa1, 0xa2, 0xa5, 0xa9, 0xae, 0xb1, 0xb3, 0xb5, 0xb7, 0xbb, 0xc1, 0xc2, 0xc5, 0xc9, 0xd5, 0xd7, 0xe1,
- 0xe2, 0xe5, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x53, 0x55, 0x57, 0x61, 0x65, 0x69, 0x73, 0x75, 0x81, 0x82, 0x85, 0x89, 0x8e, 0x91, 0x95, 0x97, 0xa1, 0xa5, 0xa9, 0xb1, 0xb7, 0xc1, 0xc2, 0xc5, 0xc9, 0xd7, 0xe1,
- 0xe2, 0xe5, 0xe9, 0xf1, 0xf3, 0xf5, 0xf7, 0x41, 0x42, 0x45, 0x49, 0x51, 0x55, 0x57, 0x61, 0x62, 0x65, 0x67, 0x68, 0x69, 0x6a, 0x71, 0x73, 0x75, 0x77, 0x7b, 0x81, 0x85, 0x89, 0x91, 0x93, 0x97, 0xa1, 0xa2, 0xa5,
- 0xa9, 0xb1, 0xb3, 0xb5, 0xb7,
- };
-
- // final consonant table
- const char JongsungTbl[32] = { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0 };
-
- int checkHangul(byte hi, byte lo)
- {
- // hi: xx
- // lo: yy
- if ((0xA1 > lo) || (0xFE < lo)) {
- return 0;
- }
- if ((hi >= 0xB0) && (hi <= 0xC8)) {
- return 1;
- }
+
+// Korean CP949 final consonant table
+static byte jongsungTable[2350] = {
+ 0, 1, 4, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 25,
+ 26, 27, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 1, 4, 8, 19,
+ 21, 0, 4, 8, 0, 1, 4, 7, 8, 10, 16, 17, 19, 20, 21, 22,
+ 25, 26, 27, 0, 4, 8, 16, 17, 19, 20, 21, 0, 1, 2, 4, 7,
+ 8, 16, 17, 19, 20, 21, 25, 0, 4, 8, 17, 19, 0, 1, 4, 7,
+ 8, 10, 12, 15, 16, 17, 19, 21, 22, 0, 1, 4, 8, 10, 16, 17,
+ 19, 21, 0, 4, 8, 16, 20, 21, 0, 1, 4, 8, 16, 17, 19, 21,
+ 0, 4, 8, 17, 19, 0, 1, 4, 7, 8, 9, 10, 15, 16, 17, 19,
+ 21, 22, 0, 1, 4, 8, 20, 21, 0, 19, 0, 1, 4, 8, 16, 17,
+ 19, 0, 4, 8, 0, 1, 4, 7, 8, 9, 16, 17, 19, 21, 0, 0,
+ 1, 4, 7, 8, 10, 16, 17, 19, 21, 22, 26, 0, 1, 2, 4, 8,
+ 10, 16, 17, 19, 20, 21, 25, 0, 1, 4, 8, 16, 17, 19, 20, 21,
+ 0, 1, 8, 0, 1, 2, 4, 8, 16, 17, 19, 20, 21, 0, 1, 4,
+ 16, 19, 21, 0, 4, 8, 19, 20, 25, 0, 0, 1, 4, 6, 8, 16,
+ 17, 19, 21, 22, 23, 0, 1, 8, 20, 21, 0, 1, 21, 0, 4, 8,
+ 16, 17, 21, 0, 0, 1, 4, 8, 15, 16, 17, 19, 21, 22, 0, 8,
+ 20, 21, 0, 1, 4, 8, 16, 17, 20, 0, 4, 8, 16, 17, 0, 0,
+ 1, 4, 6, 8, 10, 15, 16, 17, 19, 21, 25, 0, 1, 4, 8, 16,
+ 17, 19, 21, 0, 1, 2, 4, 7, 8, 9, 10, 16, 17, 19, 20, 21,
+ 22, 23, 25, 27, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 1, 4,
+ 8, 16, 21, 0, 1, 3, 4, 8, 10, 11, 16, 17, 19, 20, 21, 27,
+ 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 1, 4, 8, 16, 17, 20,
+ 21, 24, 0, 4, 0, 1, 4, 8, 10, 16, 17, 19, 21, 26, 27, 0,
+ 4, 8, 20, 0, 4, 8, 16, 17, 19, 0, 1, 4, 8, 17, 19, 21,
+ 0, 1, 4, 7, 8, 16, 17, 19, 21, 0, 20, 0, 0, 4, 8, 16,
+ 17, 0, 1, 8, 16, 17, 21, 0, 1, 4, 8, 9, 10, 16, 17, 19,
+ 21, 22, 26, 0, 4, 8, 0, 1, 4, 8, 14, 16, 17, 19, 21, 26,
+ 0, 1, 2, 4, 7, 8, 9, 10, 11, 15, 16, 17, 19, 20, 21, 22,
+ 23, 27, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 0, 1, 2, 4,
+ 7, 8, 10, 11, 16, 17, 19, 21, 23, 26, 0, 1, 4, 8, 16, 17,
+ 19, 20, 21, 0, 4, 8, 20, 21, 0, 4, 0, 1, 4, 7, 8, 10,
+ 12, 16, 17, 19, 21, 23, 25, 0, 4, 8, 0, 20, 0, 4, 8, 16,
+ 17, 19, 0, 0, 1, 4, 8, 16, 17, 19, 21, 0, 20, 0, 21, 0,
+ 4, 8, 17, 19, 21, 0, 4, 8, 16, 21, 0, 1, 4, 7, 8, 10,
+ 16, 17, 19, 21, 0, 0, 1, 4, 7, 8, 16, 17, 19, 20, 21, 22,
+ 0, 1, 4, 8, 16, 17, 19, 20, 21, 27, 0, 1, 4, 8, 16, 17,
+ 19, 20, 21, 0, 1, 4, 8, 10, 11, 16, 17, 19, 20, 21, 27, 0,
+ 1, 4, 8, 16, 17, 19, 20, 21, 0, 20, 0, 1, 4, 8, 21, 0,
+ 8, 0, 0, 4, 0, 1, 4, 8, 15, 16, 21, 0, 0, 4, 8, 16,
+ 17, 21, 0, 1, 4, 7, 8, 16, 17, 19, 0, 4, 8, 16, 17, 0,
+ 4, 8, 16, 17, 19, 21, 0, 1, 4, 8, 16, 17, 19, 20, 21, 22,
+ 26, 27, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 1, 4, 19, 21,
+ 0, 1, 4, 8, 16, 17, 19, 20, 21, 27, 0, 1, 4, 8, 16, 17,
+ 19, 21, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 4, 17, 19, 0,
+ 1, 4, 8, 16, 17, 19, 21, 0, 4, 21, 20, 0, 4, 8, 16, 17,
+ 19, 21, 0, 4, 8, 17, 19, 21, 0, 1, 4, 8, 16, 17, 19, 21,
+ 0, 20, 0, 0, 1, 4, 8, 16, 19, 21, 0, 1, 4, 8, 16, 17,
+ 19, 21, 0, 1, 4, 8, 16, 17, 19, 21, 22, 25, 26, 0, 1, 4,
+ 8, 16, 17, 19, 21, 0, 1, 4, 6, 7, 8, 9, 10, 16, 17, 19,
+ 21, 22, 25, 27, 0, 1, 4, 8, 16, 17, 19, 20, 21, 22, 0, 1,
+ 8, 21, 0, 1, 4, 8, 10, 16, 17, 19, 21, 22, 27, 0, 1, 4,
+ 8, 16, 17, 19, 20, 21, 0, 1, 4, 8, 19, 20, 21, 23, 0, 0,
+ 1, 3, 4, 8, 10, 16, 17, 19, 21, 0, 4, 20, 21, 0, 4, 8,
+ 17, 19, 21, 0, 4, 8, 17, 19, 0, 1, 2, 4, 7, 8, 9, 10,
+ 16, 17, 19, 21, 25, 27, 0, 4, 8, 17, 19, 0, 0, 4, 8, 0,
+ 4, 8, 16, 19, 0, 4, 8, 16, 19, 0, 1, 4, 7, 8, 10, 16,
+ 17, 19, 20, 21, 23, 25, 0, 1, 2, 3, 4, 7, 8, 9, 10, 11,
+ 16, 17, 19, 21, 25, 0, 1, 4, 8, 16, 17, 19, 20, 21, 25, 0,
+ 1, 4, 17, 0, 1, 4, 7, 8, 10, 16, 17, 19, 21, 22, 0, 1,
+ 4, 7, 8, 16, 17, 19, 20, 21, 0, 1, 4, 8, 17, 19, 20, 21,
+ 25, 0, 4, 0, 1, 2, 4, 8, 16, 17, 19, 21, 0, 4, 20, 0,
+ 20, 0, 1, 4, 8, 16, 17, 0, 4, 0, 1, 4, 7, 8, 9, 10,
+ 16, 17, 19, 21, 25, 26, 0, 8, 20, 0, 0, 1, 4, 8, 21, 0,
+ 4, 8, 16, 19, 21, 0, 1, 4, 8, 16, 17, 19, 0, 1, 4, 8,
+ 10, 16, 17, 19, 21, 22, 23, 0, 1, 4, 8, 10, 16, 17, 19, 20,
+ 21, 27, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 1, 16, 0, 1,
+ 4, 7, 8, 16, 19, 20, 21, 0, 21, 0, 1, 16, 17, 19, 20, 21,
+ 0, 1, 4, 8, 16, 17, 21, 0, 0, 21, 0, 1, 4, 8, 16, 19,
+ 21, 0, 21, 0, 4, 8, 16, 17, 0, 1, 4, 8, 16, 17, 19, 21,
+ 0, 1, 3, 4, 7, 8, 9, 10, 16, 17, 19, 20, 21, 25, 0, 1,
+ 4, 8, 16, 17, 19, 20, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0,
+ 4, 8, 16, 21, 0, 1, 2, 3, 4, 7, 8, 10, 11, 16, 17, 19,
+ 20, 21, 26, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 1, 4, 8,
+ 16, 17, 19, 20, 21, 0, 4, 8, 21, 0, 1, 2, 4, 8, 10, 16,
+ 17, 19, 21, 25, 0, 1, 4, 8, 21, 0, 4, 8, 16, 19, 20, 0,
+ 4, 8, 16, 17, 19, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 4,
+ 7, 8, 16, 17, 19, 21, 23, 25, 26, 0, 20, 0, 1, 4, 8, 16,
+ 21, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 8, 16, 19, 21, 0,
+ 1, 4, 8, 9, 16, 17, 19, 21, 0, 1, 4, 7, 8, 15, 16, 17,
+ 19, 21, 26, 0, 1, 3, 4, 8, 16, 17, 20, 21, 27, 0, 1, 4,
+ 8, 16, 17, 20, 21, 21, 0, 1, 4, 8, 10, 16, 17, 20, 21, 0,
+ 4, 8, 21, 0, 1, 4, 7, 8, 10, 16, 17, 21, 0, 1, 4, 20,
+ 0, 20, 0, 4, 8, 16, 17, 0, 0, 1, 4, 8, 16, 17, 21, 0,
+ 20, 0, 0, 4, 21, 0, 1, 4, 8, 10, 15, 16, 17, 0, 4, 8,
+ 16, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 4, 5, 6, 8, 9,
+ 10, 15, 16, 17, 19, 20, 21, 25, 26, 0, 1, 4, 8, 16, 17, 19,
+ 20, 21, 0, 1, 4, 8, 11, 16, 17, 19, 21, 25, 27, 0, 4, 8,
+ 17, 0, 1, 4, 5, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22,
+ 24, 26, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 2, 4, 8, 10,
+ 11, 16, 17, 18, 19, 20, 21, 25, 26, 27, 0, 4, 8, 16, 17, 19,
+ 20, 0, 1, 4, 8, 9, 10, 12, 15, 16, 17, 19, 21, 23, 0, 1,
+ 4, 8, 16, 17, 19, 20, 21, 0, 1, 4, 16, 19, 21, 0, 1, 4,
+ 8, 16, 17, 19, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 4,
+ 8, 9, 10, 16, 17, 19, 21, 0, 1, 4, 8, 16, 17, 20, 21, 0,
+ 1, 4, 8, 16, 17, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1,
+ 4, 8, 16, 17, 19, 21, 23, 0, 1, 4, 8, 14, 16, 17, 19, 21,
+ 22, 23, 24, 25, 26, 27, 0, 4, 8, 16, 19, 0, 1, 4, 8, 9,
+ 10, 15, 16, 17, 19, 20, 21, 22, 26, 0, 1, 4, 6, 7, 8, 10,
+ 16, 17, 19, 20, 21, 22, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0,
+ 1, 4, 6, 8, 16, 21, 0, 4, 8, 0, 1, 4, 8, 10, 16, 17,
+ 19, 21, 22, 0, 1, 4, 8, 16, 17, 19, 21, 0, 4, 8, 16, 17,
+ 20, 21, 0, 0, 1, 4, 8, 10, 16, 17, 19, 21, 22, 23, 27, 0,
+ 1, 8, 17, 19, 21, 0, 20, 21, 0, 4, 8, 16, 17, 19, 21, 0,
+ 1, 4, 21, 0, 1, 4, 8, 9, 10, 16, 17, 19, 21, 0, 20, 0,
+ 0, 1, 4, 8, 16, 17, 19, 0, 4, 8, 16, 0, 1, 4, 8, 16,
+ 17, 19, 21, 0, 1, 4, 7, 8, 10, 16, 17, 19, 21, 22, 25, 26,
+ 0, 1, 4, 6, 8, 11, 16, 17, 19, 20, 21, 0, 1, 4, 8, 16,
+ 17, 19, 20, 21, 0, 4, 21, 0, 1, 4, 8, 16, 17, 19, 20, 21,
+ 0, 21, 0, 20, 0, 1, 4, 8, 16, 17, 19, 21, 23, 0, 1, 8,
+ 20, 0, 20, 0, 4, 8, 16, 17, 21, 0, 1, 4, 8, 16, 17, 21,
+ 0, 20, 21, 0, 0, 0, 16, 19, 21, 0, 1, 4, 8, 16, 17, 21,
+ 22, 27, 0, 1, 4, 6, 8, 16, 17, 19, 20, 21, 22, 0, 1, 4,
+ 8, 16, 17, 19, 20, 21, 0, 4, 6, 8, 16, 21, 0, 1, 4, 8,
+ 16, 17, 19, 20, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0, 4, 20,
+ 0, 4, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0, 4, 8, 21, 0,
+ 4, 8, 16, 17, 19, 21, 0, 16, 0, 1, 4, 8, 16, 17, 19, 21,
+ 0, 20, 0, 4, 0, 4, 8, 16, 17, 19, 21, 0, 4, 8, 16, 21,
+ 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 4, 7, 8, 9, 16, 17,
+ 19, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 4, 8, 16, 17,
+ 19, 20, 21, 0, 1, 21, 0, 1, 4, 7, 8, 16, 17, 19, 20, 21,
+ 0, 1, 4, 8, 16, 17, 19, 21, 0, 4, 8, 16, 17, 19, 20, 21,
+ 0, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 4, 8, 16, 21, 0,
+ 21, 0, 8, 0, 0, 1, 4, 8, 16, 17, 19, 21, 0, 4, 8, 21,
+ 0, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0, 4, 8, 16, 0, 1,
+ 4, 8, 16, 17, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 4,
+ 8, 9, 16, 17, 19, 20, 21, 0, 1, 4, 8, 16, 17, 19, 20, 21,
+ 0, 21, 0, 1, 4, 8, 10, 16, 17, 19, 20, 21, 0, 1, 4, 8,
+ 16, 17, 19, 21, 0, 4, 20, 0, 4, 0, 1, 4, 8, 16, 17, 19,
+ 21, 26, 0, 4, 0, 0, 4, 19, 21, 0, 0, 1, 4, 8, 16, 17,
+ 19, 21, 0, 20, 0, 0, 1, 4, 8, 16, 17, 21, 0, 4, 8, 16,
+ 21, 0, 1, 4, 7, 8, 10, 16, 17, 19, 0, 4, 8, 16, 17, 0,
+ 1, 4, 8, 16, 17, 19, 21, 0, 1, 2, 4, 8, 10, 16, 17, 19,
+ 20, 21, 25, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 1, 0, 1,
+ 4, 8, 16, 17, 19, 20, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0,
+ 4, 8, 16, 17, 20, 21, 0, 8, 17, 19, 0, 1, 4, 8, 16, 17,
+ 19, 21, 0, 21, 0, 4, 0, 4, 8, 17, 19, 0, 1, 4, 7, 8,
+ 10, 16, 17, 19, 21, 0, 21, 0, 4, 8, 16, 19, 0, 4, 8, 16,
+ 19, 21, 0, 4, 8, 16, 17, 19, 0, 1, 4, 8, 16, 17, 19, 21,
+ 0, 1, 4, 8, 13, 16, 17, 19, 21, 0, 1, 4, 8, 16, 17, 19,
+ 20, 21, 0, 21, 0, 1, 4, 8, 10, 16, 17, 19, 21, 0, 1, 4,
+ 8, 16, 17, 19, 21, 0, 1, 4, 8, 16, 17, 19, 20, 21, 0, 4,
+ 8, 17, 0, 1, 4, 8, 13, 16, 17, 19, 21, 25, 0, 1, 4, 8,
+ 19, 21, 0, 1, 4, 19, 21, 0, 1, 4, 8, 17, 19, 21, 0, 4,
+ 8, 17, 19, 0, 1, 4, 8, 13, 16, 19, 21, 0, 4, 8, 16, 21,
+ 0, 1, 4, 8, 21, 0, 1, 4, 8, 16, 17, 19, 21, 0, 1, 4,
+ 8, 16, 19, 21, 0, 1, 4, 6, 7, 8, 9, 16, 17, 19, 21, 25,
+ 0, 4, 8, 16, 17, 21, 0, 1, 4, 8, 16, 17, 19, 21
+};
+
+int checkHangul(byte hi, byte lo) {
+ // hi: xx
+ // lo: yy
+ if ((0xA1 > lo) || (0xFE < lo)) {
return 0;
}
-
- // check for jongsung (final consonant)
- byte checkJongsung(byte hi, byte lo)
- {
- uint16 index = ((hi - 0xb0) * 94 + lo - 0xa1);
-
- return JongsungTbl[TGConvTbl[index] & 0x1F];
+ if ((hi >= 0xB0) && (hi <= 0xC8)) {
+ return 1;
}
-
+ return 0;
+}
+
+// check for jongsung (final consonant)
+byte checkJongsung(byte hi, byte lo) {
+ uint16 index = ((hi - 0xb0) * 94 + lo - 0xa1);
+
+ return jongsungTable[index];
+}
+
} // End of namespace Scumm
More information about the Scummvm-git-logs
mailing list