| 1119 |
return i; |
return i; |
| 1120 |
} |
} |
| 1121 |
|
|
| 1122 |
static void OutputTextUTF8(WORD K, char *TempStr, int *TempLenSrc, PComVar cv) |
static int OutputTextUTF8(WORD K, char *TempStr, PComVar cv) |
| 1123 |
{ |
{ |
| 1124 |
unsigned int code; |
unsigned int code; |
| 1125 |
int byte; |
int outlen; |
| 1126 |
int TempLen = *TempLenSrc; |
int TempLen = 0; |
| 1127 |
|
|
| 1128 |
code = SJIS2UTF8(K, &byte, cv->Locale); |
code = SJIS2UTF8(K, &outlen, cv->Locale); |
| 1129 |
if (byte == 1) { |
switch (outlen) { |
| 1130 |
TempStr[TempLen++] = code; |
case 3: |
|
} |
|
|
else if (byte == 2) { |
|
|
TempStr[TempLen++] = (code >> 8) & 0xff; |
|
|
TempStr[TempLen++] = code & 0xff; |
|
|
|
|
|
} |
|
|
else if (byte == 3) { |
|
| 1131 |
TempStr[TempLen++] = (code >> 16) & 0xff; |
TempStr[TempLen++] = (code >> 16) & 0xff; |
| 1132 |
|
case 2: |
| 1133 |
TempStr[TempLen++] = (code >> 8) & 0xff; |
TempStr[TempLen++] = (code >> 8) & 0xff; |
| 1134 |
|
case 1: |
| 1135 |
TempStr[TempLen++] = code & 0xff; |
TempStr[TempLen++] = code & 0xff; |
|
|
|
| 1136 |
} |
} |
| 1137 |
|
|
| 1138 |
*TempLenSrc = TempLen; |
return TempLen; |
| 1139 |
} |
} |
| 1140 |
|
|
|
|
|
| 1141 |
// |
// |
| 1142 |
// SJISから各種漢字コードへ変換して出力する。 |
// SJISから各種漢字コードへ変換して出力する。 |
| 1143 |
// |
// |
| 1145 |
{ |
{ |
| 1146 |
int i, TempLen; |
int i, TempLen; |
| 1147 |
WORD K; |
WORD K; |
| 1148 |
char TempStr[11]; |
char TempStr[12]; |
| 1149 |
int SendCodeNew; |
int SendCodeNew; |
| 1150 |
BYTE d; |
BYTE d; |
| 1151 |
BOOL Full, KanjiFlagNew; |
BOOL Full, KanjiFlagNew; |
| 1156 |
TempLen = 0; |
TempLen = 0; |
| 1157 |
d = (BYTE)B[i]; |
d = (BYTE)B[i]; |
| 1158 |
SendCodeNew = cv->SendCode; |
SendCodeNew = cv->SendCode; |
| 1159 |
|
KanjiFlagNew = FALSE; |
| 1160 |
|
|
| 1161 |
if (cv->SendKanjiFlag) { |
if (cv->SendKanjiFlag) { |
|
KanjiFlagNew = FALSE; |
|
| 1162 |
SendCodeNew = IdKanji; |
SendCodeNew = IdKanji; |
| 1163 |
|
|
| 1164 |
K = (cv->SendKanjiFirst << 8) + d; |
K = (cv->SendKanjiFirst << 8) + d; |
| 1165 |
|
|
| 1166 |
// UTF-8への変換を行う。1〜3バイトまでの対応なので注意。 |
// UTF-8への変換を行う。1〜3バイトまでの対応なので注意。 |
| 1167 |
if (cv->KanjiCodeSend == IdUTF8 || cv->Language == IdUtf8) { |
if (cv->KanjiCodeSend == IdUTF8 || cv->Language == IdUtf8) { |
| 1168 |
OutputTextUTF8(K, TempStr, &TempLen, cv); |
TempLen += OutputTextUTF8(K, TempStr, cv); |
| 1169 |
|
} |
| 1170 |
} else { |
else { |
| 1171 |
|
switch (cv->Language) { |
| 1172 |
if (cv->Language == IdJapanese) { |
case IdJapanese: |
| 1173 |
if (cv->KanjiCodeSend == IdEUC) { |
switch (cv->KanjiCodeSend) { |
| 1174 |
|
case IdEUC: |
| 1175 |
K = SJIS2EUC(K); |
K = SJIS2EUC(K); |
| 1176 |
} |
break; |
| 1177 |
else if (cv->KanjiCodeSend != IdSJIS) { |
case IdJIS: |
| 1178 |
K = SJIS2JIS(K); |
K = SJIS2JIS(K); |
| 1179 |
|
if ((cv->SendCode==IdKatakana) && |
| 1180 |
|
(cv->JIS7KatakanaSend==1)) { |
| 1181 |
|
TempStr[TempLen++] = SI; |
| 1182 |
|
} |
| 1183 |
|
break; |
| 1184 |
|
case IdSJIS: |
| 1185 |
|
/* nothing to do */ |
| 1186 |
|
break; |
| 1187 |
} |
} |
| 1188 |
|
break; |
| 1189 |
if ((cv->SendCode==IdKatakana) && |
case IdKorean: |
| 1190 |
(cv->KanjiCodeSend==IdJIS) && |
break; |
|
(cv->JIS7KatakanaSend==1)) { |
|
|
TempStr[TempLen] = SI; |
|
|
TempLen++; |
|
|
} |
|
| 1191 |
} |
} |
| 1192 |
|
TempStr[TempLen++] = HIBYTE(K); |
| 1193 |
TempStr[TempLen] = HIBYTE(K); |
TempStr[TempLen++] = LOBYTE(K); |
|
TempStr[TempLen+1] = LOBYTE(K); |
|
|
TempLen = TempLen + 2; |
|
| 1194 |
} |
} |
| 1195 |
} |
} |
| 1196 |
else if (IsDBCSLeadByteEx(*cv->CodePage, d)) { |
else if (IsDBCSLeadByteEx(*cv->CodePage, d)) { |
| 1198 |
cv->SendKanjiFirst = d; |
cv->SendKanjiFirst = d; |
| 1199 |
SendCodeNew = IdKanji; |
SendCodeNew = IdKanji; |
| 1200 |
|
|
| 1201 |
if ((cv->SendCode!=IdKanji) && |
if (cv->Language == IdJapanese) { |
| 1202 |
(cv->KanjiCodeSend==IdJIS)) { |
if ((cv->SendCode!=IdKanji) && (cv->KanjiCodeSend==IdJIS)) { |
| 1203 |
TempStr[0] = 0x1B; |
TempStr[0] = 0x1B; |
| 1204 |
TempStr[1] = '$'; |
TempStr[1] = '$'; |
| 1205 |
if (cv->KanjiIn == IdKanjiInB) { |
if (cv->KanjiIn == IdKanjiInB) { |
| 1206 |
TempStr[2] = 'B'; |
TempStr[2] = 'B'; |
| 1207 |
} |
} |
| 1208 |
else { |
else { |
| 1209 |
TempStr[2] = '@'; |
TempStr[2] = '@'; |
| 1210 |
|
} |
| 1211 |
|
TempLen = 3; |
| 1212 |
} |
} |
|
TempLen = 3; |
|
|
} |
|
|
else { |
|
|
TempLen = 0; |
|
| 1213 |
} |
} |
| 1214 |
} |
} |
| 1215 |
else { |
else { |
| 1216 |
KanjiFlagNew = FALSE; |
if (cv->Language == IdJapanese) { |
| 1217 |
|
if ((cv->SendCode==IdKanji) && (cv->KanjiCodeSend==IdJIS)) { |
| 1218 |
if ((cv->SendCode==IdKanji) && |
TempStr[0] = 0x1B; |
| 1219 |
(cv->KanjiCodeSend==IdJIS)) { |
TempStr[1] = '('; |
| 1220 |
TempStr[0] = 0x1B; |
switch (cv->KanjiOut) { |
| 1221 |
TempStr[1] = '('; |
case IdKanjiOutJ: |
|
switch (cv->KanjiOut) { |
|
|
case IdKanjiOutJ: |
|
| 1222 |
TempStr[2] = 'J'; |
TempStr[2] = 'J'; |
| 1223 |
break; |
break; |
| 1224 |
case IdKanjiOutH: |
case IdKanjiOutH: |
| 1225 |
TempStr[2] = 'H'; |
TempStr[2] = 'H'; |
| 1226 |
break; |
break; |
| 1227 |
default: |
default: |
| 1228 |
TempStr[2] = 'B'; |
TempStr[2] = 'B'; |
| 1229 |
|
} |
| 1230 |
|
TempLen = 3; |
| 1231 |
} |
} |
|
TempLen = 3; |
|
|
} |
|
|
else { |
|
|
TempLen = 0; |
|
|
} |
|
| 1232 |
|
|
| 1233 |
if ((0xa0<d) && (d<0xe0)) { |
if ((0xa0<d) && (d<0xe0)) { |
| 1234 |
SendCodeNew = IdKatakana; |
SendCodeNew = IdKatakana; |
| 1235 |
if ((cv->SendCode!=IdKatakana) && |
if ((cv->SendCode!=IdKatakana) && |
| 1236 |
(cv->KanjiCodeSend==IdJIS) && |
(cv->KanjiCodeSend==IdJIS) && |
| 1237 |
(cv->JIS7KatakanaSend==1)) { |
(cv->JIS7KatakanaSend==1)) { |
| 1238 |
TempStr[TempLen] = SO; |
TempStr[TempLen++] = SO; |
| 1239 |
TempLen++; |
} |
| 1240 |
} |
} |
| 1241 |
} |
else { |
| 1242 |
else { |
SendCodeNew = IdASCII; |
| 1243 |
SendCodeNew = IdASCII; |
if ((cv->SendCode==IdKatakana) && |
| 1244 |
if ((cv->SendCode==IdKatakana) && |
(cv->KanjiCodeSend==IdJIS) && |
| 1245 |
(cv->KanjiCodeSend==IdJIS) && |
(cv->JIS7KatakanaSend==1)) { |
| 1246 |
(cv->JIS7KatakanaSend==1)) { |
TempStr[TempLen++] = SI; |
| 1247 |
TempStr[TempLen] = SI; |
} |
|
TempLen++; |
|
| 1248 |
} |
} |
| 1249 |
} |
} |
| 1250 |
|
|
| 1251 |
if (d==0x0d) { |
if (d==0x0d) { |
| 1252 |
TempStr[TempLen] = 0x0d; |
TempStr[TempLen++] = 0x0d; |
|
TempLen++; |
|
| 1253 |
if (cv->CRSend==IdCRLF) { |
if (cv->CRSend==IdCRLF) { |
| 1254 |
TempStr[TempLen] = 0x0a; |
TempStr[TempLen++] = 0x0a; |
|
TempLen++; |
|
| 1255 |
} |
} |
| 1256 |
else if ((cv->CRSend==IdCR) && |
else if ((cv->CRSend==IdCR) && |
| 1257 |
cv->TelFlag && ! cv->TelBinSend) { |
cv->TelFlag && ! cv->TelBinSend) { |
| 1258 |
TempStr[TempLen] = 0; |
TempStr[TempLen++] = 0; |
|
TempLen++; |
|
| 1259 |
} |
} |
| 1260 |
} |
} |
| 1261 |
else if ((d>=0xa1) && (d<=0xe0)) { |
else if ((d>=0x80) && (cv->KanjiCodeSend==IdUTF8 || cv->Language==IdUtf8)) { |
| 1262 |
/* Katakana */ |
TempLen += OutputTextUTF8((WORD)d, TempStr, cv); |
| 1263 |
|
} |
| 1264 |
|
else if ((d>=0xa1) && (d<=0xe0) && (cv->Language == IdJapanese)) { |
| 1265 |
if (cv->KanjiCodeSend==IdEUC) { |
if (cv->KanjiCodeSend==IdEUC) { |
| 1266 |
TempStr[TempLen] = (char)0x8E; |
TempStr[TempLen++] = (char)0x8E; |
|
TempLen++; |
|
| 1267 |
} |
} |
| 1268 |
if ((cv->KanjiCodeSend==IdJIS) && |
if ((cv->KanjiCodeSend==IdJIS) && |
| 1269 |
(cv->JIS7KatakanaSend==1)) { |
(cv->JIS7KatakanaSend==1)) { |
| 1270 |
TempStr[TempLen] = d & 0x7f; |
TempStr[TempLen++] = d & 0x7f; |
| 1271 |
} |
} |
| 1272 |
else { |
else { |
| 1273 |
TempStr[TempLen] = d; |
TempStr[TempLen++] = d; |
|
} |
|
|
TempLen++; |
|
|
|
|
|
// 半角カナはUnicodeでは2バイトになる (2004.10.4 yutaka) |
|
|
if (cv->KanjiCodeSend==IdUTF8 || cv->Language==IdUtf8) { |
|
|
TempLen = 0; |
|
|
K = d; |
|
|
OutputTextUTF8(K, TempStr, &TempLen, cv); |
|
| 1274 |
} |
} |
| 1275 |
} |
} |
| 1276 |
else { |
else { |
| 1277 |
TempStr[TempLen] = d; |
TempStr[TempLen++] = d; |
|
TempLen++; |
|
| 1278 |
if (cv->TelFlag && (d==0xff)) { |
if (cv->TelFlag && (d==0xff)) { |
| 1279 |
TempStr[TempLen] = (char)0xff; |
TempStr[TempLen++] = (char)0xff; |
|
TempLen++; |
|
| 1280 |
} |
} |
| 1281 |
} |
} |
| 1282 |
} // if (cv->SendKanjiFlag) else if ... else ... end |
} // if (cv->SendKanjiFlag) else if ... else ... end |
| 1304 |
int FAR PASCAL CommTextOut(PComVar cv, PCHAR B, int C) |
int FAR PASCAL CommTextOut(PComVar cv, PCHAR B, int C) |
| 1305 |
{ |
{ |
| 1306 |
int i, TempLen; |
int i, TempLen; |
| 1307 |
char TempStr[11]; |
char TempStr[12]; |
| 1308 |
BYTE d; |
BYTE d; |
| 1309 |
BOOL Full; |
BOOL Full; |
| 1310 |
|
|
| 1313 |
} |
} |
| 1314 |
|
|
| 1315 |
switch (cv->Language) { |
switch (cv->Language) { |
|
case IdJapanese: |
|
| 1316 |
case IdUtf8: |
case IdUtf8: |
| 1317 |
|
case IdJapanese: |
| 1318 |
case IdKorean: |
case IdKorean: |
| 1319 |
return TextOutJP(cv, B, C); |
return TextOutJP(cv, B, C); |
| 1320 |
break; |
break; |
| 1428 |
K = (cv->EchoKanjiFirst << 8) + d; |
K = (cv->EchoKanjiFirst << 8) + d; |
| 1429 |
// UTF-8への変換を行う。1〜3バイトまでの対応なので注意。 |
// UTF-8への変換を行う。1〜3バイトまでの対応なので注意。 |
| 1430 |
if (cv->KanjiCodeSend == IdUTF8 || cv->Language==IdUtf8) { |
if (cv->KanjiCodeSend == IdUTF8 || cv->Language==IdUtf8) { |
| 1431 |
OutputTextUTF8(K, TempStr, &TempLen, cv); |
TempLen += OutputTextUTF8(K, TempStr, cv); |
| 1432 |
} |
} |
| 1433 |
else { |
else { |
| 1434 |
if (cv->KanjiCodeEcho == IdEUC) { |
if (cv->KanjiCodeEcho == IdEUC) { |
| 1594 |
K = (cv->EchoKanjiFirst << 8) + d; |
K = (cv->EchoKanjiFirst << 8) + d; |
| 1595 |
// UTF-8への変換を行う。1〜3バイトまでの対応なので注意。 |
// UTF-8への変換を行う。1〜3バイトまでの対応なので注意。 |
| 1596 |
if (cv->KanjiCodeSend == IdUTF8) { |
if (cv->KanjiCodeSend == IdUTF8) { |
| 1597 |
OutputTextUTF8(K, TempStr, &TempLen, cv); |
TempLen += OutputTextUTF8(K, TempStr, cv); |
| 1598 |
} |
} |
| 1599 |
else { |
else { |
| 1600 |
TempStr[TempLen] = HIBYTE(K); |
TempStr[TempLen] = HIBYTE(K); |