1 /*=============================================================================
\r
3 *
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\81^
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\r
5 ===============================================================================
\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.
\r
8 / Redistribution and use in source and binary forms, with or without
\r
9 / modification, are permitted provided that the following conditions
\r
12 / 1. Redistributions of source code must retain the above copyright
\r
13 / notice, this list of conditions and the following disclaimer.
\r
14 / 2. Redistributions in binary form must reproduce the above copyright
\r
15 / notice, this list of conditions and the following disclaimer in the
\r
16 / documentation and/or other materials provided with the distribution.
\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
\r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
\r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
\r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
\r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
\r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
\r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
\r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
\r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
\r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
28 /============================================================================*/
\r
34 #include <winsock.h>
\r
35 #include <mbstring.h>
\r
36 #include <windowsx.h>
\r
39 #include "resource.h"
\r
43 #define CONV_ASCII 0 /* ASCII
\95¶
\8e\9a\8f\88\97\9d\92\86 */
\r
44 #define CONV_KANJI 1 /*
\8a¿
\8e\9a\8f\88\97\9d\92\86 */
\r
45 #define CONV_KANA 2 /*
\94¼
\8ap
\83J
\83^
\83J
\83i
\8f\88\97\9d\92\86 */
\r
48 /*=====
\83v
\83\8d\83g
\83^
\83C
\83v =====*/
\r
50 static char *ConvEUCtoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put);
\r
51 static char *ConvJIStoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put);
\r
52 static char *ConvSJIStoEUCkanaProc(CODECONVINFO *cInfo, char Dt, char *Put);
\r
53 static char *ConvSJIStoJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put);
\r
54 static int HanKataToZen(char Ch);
\r
55 static int AskDakuon(char Ch, char Daku);
\r
57 static int CheckOnSJIS(uchar *Pos, uchar *Btm);
\r
58 static int CheckOnEUC(uchar *Pos, uchar *Btm);
\r
59 static int ConvertIBMExtendedChar(int code);
\r
64 /*-----
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\82Ì
\83e
\83X
\83g
\83v
\83\8d\83O
\83\89\83\80 ------------------------------------*/
\r
66 void CodeCnvTest(void)
\r
69 #define BUFBUF2 BUFBUF+3
\r
79 // DoPrintf("---START ZEN");
\r
81 Strm1 = fopen("in.txt", "rb");
\r
82 Strm2 = fopen("out_zen.txt", "wb");
\r
84 InitCodeConvInfo(&cInfo);
\r
85 cInfo.KanaCnv = YES;
\r
88 while((Byte = fread(Buf, 1, BUFBUF, Strm1)) != 0)
\r
91 cInfo.StrLen = Byte;
\r
93 cInfo.BufSize = BUFBUF2;
\r
95 // DoPrintf("READ %d", Byte);
\r
99 // Continue = ConvEUCtoSJIS(&cInfo);
\r
100 // Continue = ConvJIStoSJIS(&cInfo);
\r
101 // Continue = ConvSJIStoEUC(&cInfo);
\r
102 // Continue = ConvSJIStoJIS(&cInfo);
\r
103 Continue = ConvSMBtoSJIS(&cInfo);
\r
104 // Continue = ConvSJIStoSMB_HEX(&cInfo);
\r
105 // Continue = ConvSJIStoSMB_CAP(&cInfo);
\r
107 fwrite(Buf2, cInfo.OutLen, 1, Strm2);
\r
108 // DoPrintf("WRITE %d", cInfo.OutLen);
\r
111 while(Continue == YES);
\r
115 cInfo.BufSize = BUFBUF2;
\r
116 FlushRestData(&cInfo);
\r
117 fwrite(Buf2, cInfo.OutLen, 1, Strm2);
\r
118 // DoPrintf("WRITE %d", cInfo.OutLen);
\r
125 // DoPrintf("---START HAN");
\r
127 Strm1 = fopen("in.txt", "rb");
\r
128 Strm2 = fopen("out_han.txt", "wb");
\r
130 InitCodeConvInfo(&cInfo);
\r
131 cInfo.KanaCnv = NO;
\r
134 while((Byte = fread(Buf, 1, BUFBUF, Strm1)) != 0)
\r
137 cInfo.StrLen = Byte;
\r
139 cInfo.BufSize = BUFBUF2;
\r
141 // DoPrintf("READ %d", Byte);
\r
145 // Continue = ConvEUCtoSJIS(&cInfo);
\r
146 // Continue = ConvJIStoSJIS(&cInfo);
\r
147 // Continue = ConvSJIStoEUC(&cInfo);
\r
148 // Continue = ConvSJIStoJIS(&cInfo);
\r
149 Continue = ConvSMBtoSJIS(&cInfo);
\r
150 // Continue = ConvSJIStoSMB_HEX(&cInfo);
\r
151 // Continue = ConvSJIStoSMB_CAP(&cInfo);
\r
152 fwrite(Buf2, cInfo.OutLen, 1, Strm2);
\r
153 // DoPrintf("WRITE %d", cInfo.OutLen);
\r
156 while(Continue == YES);
\r
160 cInfo.BufSize = BUFBUF2;
\r
161 FlushRestData(&cInfo);
\r
162 fwrite(Buf2, cInfo.OutLen, 1, Strm2);
\r
163 // DoPrintf("WRITE %d", cInfo.OutLen);
\r
168 // DoPrintf("---END");
\r
177 /*-----
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\82Ì
\83e
\83X
\83g
\83v
\83\8d\83O
\83\89\83\80 ------------------------------------*/
\r
179 void TermCodeCnvTest(void)
\r
182 #define BUFBUF2 BUFBUF
\r
184 TERMCODECONVINFO cInfo;
\r
186 char Buf2[BUFBUF2];
\r
192 // DoPrintf("---START");
\r
194 Strm1 = fopen("in.txt", "rb");
\r
195 Strm2 = fopen("out.txt", "wb");
\r
197 InitTermCodeConvInfo(&cInfo);
\r
199 while((Byte = fread(Buf, 1, BUFBUF, Strm1)) != 0)
\r
202 cInfo.StrLen = Byte;
\r
204 cInfo.BufSize = BUFBUF2;
\r
206 // DoPrintf("READ %d", Byte);
\r
210 Continue = ConvTermCodeToCRLF(&cInfo);
\r
212 fwrite(Buf2, cInfo.OutLen, 1, Strm2);
\r
213 // DoPrintf("WRITE %d", cInfo.OutLen);
\r
216 while(Continue == YES);
\r
220 cInfo.BufSize = BUFBUF2;
\r
221 FlushRestTermCodeConvData(&cInfo);
\r
222 fwrite(Buf2, cInfo.OutLen, 1, Strm2);
\r
223 // DoPrintf("WRITE %d", cInfo.OutLen);
\r
228 // DoPrintf("---END");
\r
245 /*-----
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\82ð
\8f\89\8aú
\89» --------------------------------------------
\r
248 * TERMCODECONVINFO *cInfo :
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
252 *----------------------------------------------------------------------------*/
\r
254 void InitTermCodeConvInfo(TERMCODECONVINFO *cInfo)
\r
261 /*-----
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\82Ì
\8ec
\82è
\8fî
\95ñ
\82ð
\8fo
\97Í ----------------------------------------
\r
264 * TERMCODECONVINFO *cInfo :
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
267 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (=NO)
\r
270 *
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\82Ì
\8dÅ
\8cã
\82É
\8cÄ
\82Ô
\8e\96\r
271 *----------------------------------------------------------------------------*/
\r
273 int FlushRestTermCodeConvData(TERMCODECONVINFO *cInfo)
\r
279 if(cInfo->Term == 0x0D)
\r
282 cInfo->OutLen = Put - cInfo->Buf;
\r
288 /*-----
\89ü
\8ds
\83R
\81[
\83h
\82ðCRLF
\82É
\95Ï
\8a· -------------------------------------------------
\r
291 * TERMCODECONVINFO *cInfo :
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
294 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
297 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
298 *----------------------------------------------------------------------------*/
\r
300 int ConvTermCodeToCRLF(TERMCODECONVINFO *cInfo)
\r
310 Limit = cInfo->Buf + cInfo->BufSize - 1;
\r
312 for(; cInfo->StrLen > 0; cInfo->StrLen--)
\r
322 if(cInfo->Term == 0x0D)
\r
325 cInfo->Term = *Str++;
\r
331 if(cInfo->Term != 0x0D)
\r
336 if(cInfo->Term == 0x0D)
\r
345 cInfo->OutLen = Put - cInfo->Buf;
\r
351 /*-----
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\82ð
\8f\89\8aú
\89» --------------------------------------------
\r
354 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
358 *----------------------------------------------------------------------------*/
\r
360 void InitCodeConvInfo(CODECONVINFO *cInfo)
\r
362 cInfo->KanaCnv = YES;
\r
364 cInfo->EscProc = 0;
\r
365 cInfo->KanjiMode = CONV_ASCII;
\r
366 cInfo->KanjiFst = 0;
\r
367 cInfo->KanaPrev = 0;
\r
368 cInfo->KanaProc = NULL;
\r
370 cInfo->EscUTF8Len = 0;
\r
375 /*-----
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\82Ì
\8ec
\82è
\8fî
\95ñ
\82ð
\8fo
\97Í ----------------------------------------
\r
378 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
381 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (=NO)
\r
384 *
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\82Ì
\8dÅ
\8cã
\82É
\8cÄ
\82Ô
\8e\96\r
385 *----------------------------------------------------------------------------*/
\r
387 int FlushRestData(CODECONVINFO *cInfo)
\r
393 if(cInfo->KanaProc != NULL)
\r
394 Put = (cInfo->KanaProc)(cInfo, 0, Put);
\r
396 if(cInfo->KanjiFst != 0)
\r
397 *Put++ = cInfo->KanjiFst;
\r
398 if(cInfo->EscProc >= 1)
\r
399 *Put++ = cInfo->EscCode[0];
\r
400 if(cInfo->EscProc == 2)
\r
401 *Put++ = cInfo->EscCode[1];
\r
403 memcpy(Put, cInfo->EscUTF8, sizeof(char) * cInfo->EscUTF8Len);
\r
404 Put += cInfo->EscUTF8Len;
\r
406 cInfo->OutLen = Put - cInfo->Buf;
\r
412 /*----- EUC
\8a¿
\8e\9a\83R
\81[
\83h
\82ðSHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· ------------------------------
\r
415 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
418 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
421 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
422 *----------------------------------------------------------------------------*/
\r
424 int ConvEUCtoSJIS(CODECONVINFO *cInfo)
\r
432 cInfo->KanaProc = &ConvEUCtoSJISkanaProc;
\r
437 Limit = cInfo->Buf + cInfo->BufSize - 2;
\r
439 for(; cInfo->StrLen > 0; cInfo->StrLen--)
\r
447 if((*Str & 0x80) != 0)
\r
449 if(cInfo->KanjiFst == 0)
\r
450 cInfo->KanjiFst = *Str++;
\r
453 if((uchar)cInfo->KanjiFst == (uchar)0x8E) /*
\94¼
\8ap
\83J
\83^
\83J
\83i */
\r
455 Put = ConvEUCtoSJISkanaProc(cInfo, *Str++, Put);
\r
459 Put = ConvEUCtoSJISkanaProc(cInfo, 0, Put);
\r
461 Kcode = _mbcjistojms(((cInfo->KanjiFst & 0x7F) * 0x100) + (*Str++ & 0x7F));
\r
462 *Put++ = HIGH8(Kcode);
\r
463 *Put++ = LOW8(Kcode);
\r
465 cInfo->KanjiFst = 0;
\r
470 Put = ConvEUCtoSJISkanaProc(cInfo, 0, Put);
\r
472 if(cInfo->KanjiFst != 0)
\r
474 *Put++ = cInfo->KanjiFst;
\r
475 cInfo->KanjiFst = 0;
\r
482 cInfo->OutLen = Put - cInfo->Buf;
\r
488 /*----- EUC-->SHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a·
\82Ì
\94¼
\8ap
\83J
\83^
\83J
\83i
\82Ì
\8f\88\97\9d -------------------
\r
491 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
492 * char Dt :
\95¶
\8e\9a\r
493 * char *Put :
\83f
\81[
\83^
\83Z
\83b
\83g
\88Ê
\92u
\r
496 * char *
\8e\9f\82Ì
\83f
\81[
\83^
\83Z
\83b
\83g
\88Ê
\92u
\r
497 *----------------------------------------------------------------------------*/
\r
499 static char *ConvEUCtoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put)
\r
504 if(cInfo->KanaCnv == NO)
\r
511 if(cInfo->KanaPrev != 0)
\r
513 Daku = AskDakuon(cInfo->KanaPrev, Dt);
\r
515 Kcode = _mbcjistojms(HanKataToZen(cInfo->KanaPrev)) + Daku;
\r
516 *Put++ = HIGH8(Kcode);
\r
517 *Put++ = LOW8(Kcode);
\r
520 cInfo->KanaPrev = Dt;
\r
522 cInfo->KanaPrev = 0;
\r
525 cInfo->KanaPrev = Dt;
\r
531 /*----- JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82ðSHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· ------------------------------
\r
534 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
537 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
540 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
542 *
\83G
\83X
\83P
\81[
\83v
\83R
\81[
\83h
\82Í
\81A
\8e\9f\82Ì
\82à
\82Ì
\82É
\91Î
\89\9e\82µ
\82Ä
\82¢
\82é
\r
543 *
\8a¿
\8e\9a\8aJ
\8en <ESC>$B <ESC>$@
\r
544 *
\94¼
\8ap
\83J
\83i
\8aJ
\8en <ESC>(I
\r
545 *
\8a¿
\8e\9a\8fI
\97¹ <ESC>(B <ESC>(J <ESC>(H
\r
546 *----------------------------------------------------------------------------*/
\r
548 int ConvJIStoSJIS(CODECONVINFO *cInfo)
\r
556 cInfo->KanaProc = &ConvJIStoSJISkanaProc;
\r
561 Limit = cInfo->Buf + cInfo->BufSize - 3;
\r
563 for(; cInfo->StrLen > 0; cInfo->StrLen--)
\r
571 if(cInfo->EscProc == 0)
\r
575 if(cInfo->KanjiFst != 0)
\r
577 *Put++ = cInfo->KanjiFst;
\r
578 cInfo->KanjiFst = 0;
\r
580 Put = ConvJIStoSJISkanaProc(cInfo, 0, Put);
\r
582 cInfo->EscCode[cInfo->EscProc] = *Str++;
\r
587 if(cInfo->KanjiMode == CONV_KANA)
\r
589 if(cInfo->KanjiFst != 0)
\r
591 *Put++ = cInfo->KanjiFst;
\r
592 cInfo->KanjiFst = 0;
\r
595 if((*Str >= 0x21) && (*Str <= 0x5F))
\r
597 Put = ConvJIStoSJISkanaProc(cInfo, *Str++, Put);
\r
601 Put = ConvJIStoSJISkanaProc(cInfo, 0, Put);
\r
605 else if(cInfo->KanjiMode == CONV_KANJI)
\r
607 Put = ConvJIStoSJISkanaProc(cInfo, 0, Put);
\r
608 if((*Str >= 0x21) && (*Str <= 0x7E))
\r
610 if(cInfo->KanjiFst == 0)
\r
611 cInfo->KanjiFst = *Str++;
\r
614 Kcode = _mbcjistojms((cInfo->KanjiFst * 0x100) + *Str++);
\r
615 *Put++ = HIGH8(Kcode);
\r
616 *Put++ = LOW8(Kcode);
\r
617 cInfo->KanjiFst = 0;
\r
622 if(cInfo->KanjiFst == 0)
\r
626 *Put++ = cInfo->KanjiFst;
\r
628 cInfo->KanjiFst = 0;
\r
634 Put = ConvJIStoSJISkanaProc(cInfo, 0, Put);
\r
639 else if(cInfo->EscProc == 1)
\r
641 if((*Str == '$') || (*Str == '('))
\r
643 cInfo->EscCode[cInfo->EscProc] = *Str++;
\r
648 *Put++ = cInfo->EscCode[0];
\r
650 cInfo->EscProc = 0;
\r
653 else if(cInfo->EscProc == 2)
\r
655 if((cInfo->EscCode[1] == '$') && ((*Str == 'B') || (*Str == '@')))
\r
656 cInfo->KanjiMode = CONV_KANJI;
\r
657 else if((cInfo->EscCode[1] == '(') && (*Str == 'I'))
\r
658 cInfo->KanjiMode = CONV_KANA;
\r
659 else if((cInfo->EscCode[1] == '(') && ((*Str == 'B') || (*Str == 'J') || (*Str == 'H')))
\r
660 cInfo->KanjiMode = CONV_ASCII;
\r
663 *Put++ = cInfo->EscCode[0];
\r
664 *Put++ = cInfo->EscCode[1];
\r
665 if((cInfo->KanjiMode == CONV_KANJI) && ((*Str >= 0x21) && (*Str <= 0x7E)))
\r
666 cInfo->KanjiFst = *Str;
\r
671 cInfo->EscProc = 0;
\r
676 cInfo->OutLen = Put - cInfo->Buf;
\r
682 /*----- JIS-->SHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a·
\82Ì
\94¼
\8ap
\83J
\83^
\83J
\83i
\82Ì
\8f\88\97\9d -------------------
\r
685 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
686 * char Dt :
\95¶
\8e\9a\r
687 * char *Put :
\83f
\81[
\83^
\83Z
\83b
\83g
\88Ê
\92u
\r
690 * char *
\8e\9f\82Ì
\83f
\81[
\83^
\83Z
\83b
\83g
\88Ê
\92u
\r
691 *----------------------------------------------------------------------------*/
\r
693 static char *ConvJIStoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put)
\r
698 Dt = (uchar)Dt + (uchar)0x80;
\r
699 if(cInfo->KanaCnv == NO)
\r
701 if((uchar)Dt != (uchar)0x80)
\r
706 if(cInfo->KanaPrev != 0)
\r
708 Daku = AskDakuon(cInfo->KanaPrev, Dt);
\r
709 Kcode = _mbcjistojms(HanKataToZen(cInfo->KanaPrev)) + Daku;
\r
710 *Put++ = HIGH8(Kcode);
\r
711 *Put++ = LOW8(Kcode);
\r
713 if((Daku == 0) && ((uchar)Dt != (uchar)0x80))
\r
714 cInfo->KanaPrev = Dt;
\r
716 cInfo->KanaPrev = 0;
\r
718 else if((uchar)Dt != (uchar)0x80)
\r
719 cInfo->KanaPrev = Dt;
\r
725 /*----- Samba-HEX/Samba-CAP
\8a¿
\8e\9a\83R
\81[
\83h
\82ðSHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· --------------
\r
728 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
731 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
734 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
735 *
\95ª
\8a\84\82³
\82ê
\82½
\93ü
\97Í
\95¶
\8e\9a\97ñ
\82Ì
\95Ï
\8a·
\82Í
\83T
\83|
\81[
\83g
\82µ
\82Ä
\82¢
\82È
\82¢
\r
736 *
\94¼
\8ap
\83J
\83^
\83J
\83i
\82Ì
\95Ï
\8a·
\90Ý
\92è
\82É
\82Í
\91Î
\89\9e\82µ
\82Ä
\82¢
\82È
\82¢
\r
737 *----------------------------------------------------------------------------*/
\r
739 int ConvSMBtoSJIS(CODECONVINFO *cInfo)
\r
749 Limit = cInfo->Buf + cInfo->BufSize - 2;
\r
751 for(; cInfo->StrLen > 0; cInfo->StrLen--)
\r
759 if((*Str == SAMBA_HEX_TAG) && (cInfo->StrLen >= 3))
\r
761 if(isxdigit(*(Str+1)) && isxdigit(*(Str+2)))
\r
763 *Put++ = N2INT(hex2bin(*(Str+1)), hex2bin(*(Str+2)));
\r
765 cInfo->StrLen -= 2;
\r
775 cInfo->OutLen = Put - cInfo->Buf;
\r
781 /*----- SHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82ðEUC
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· ------------------------------
\r
784 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
787 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
790 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
791 *----------------------------------------------------------------------------*/
\r
793 int ConvSJIStoEUC(CODECONVINFO *cInfo)
\r
801 cInfo->KanaProc = &ConvSJIStoEUCkanaProc;
\r
806 Limit = cInfo->Buf + cInfo->BufSize - 2;
\r
808 for(; cInfo->StrLen > 0; cInfo->StrLen--)
\r
816 if(cInfo->KanjiFst == 0)
\r
818 if((((uchar)*Str >= (uchar)0x81) && ((uchar)*Str <= (uchar)0x9F)) ||
\r
819 ((uchar)*Str >= (uchar)0xE0))
\r
821 Put = ConvSJIStoEUCkanaProc(cInfo, 0, Put);
\r
822 cInfo->KanjiFst = *Str++;
\r
824 else if(((uchar)*Str >= (uchar)0xA0) && ((uchar)*Str <= (uchar)0xDF))
\r
826 Put = ConvSJIStoEUCkanaProc(cInfo, *Str++, Put);
\r
830 Put = ConvSJIStoEUCkanaProc(cInfo, 0, Put);
\r
836 if((uchar)*Str >= (uchar)0x40)
\r
838 Kcode = ConvertIBMExtendedChar(((uchar)cInfo->KanjiFst * 0x100) + (uchar)*Str++);
\r
839 Kcode = _mbcjmstojis(Kcode);
\r
840 *Put++ = HIGH8(Kcode) | 0x80;
\r
841 *Put++ = LOW8(Kcode) | 0x80;
\r
845 *Put++ = cInfo->KanjiFst;
\r
848 cInfo->KanjiFst = 0;
\r
853 cInfo->OutLen = Put - cInfo->Buf;
\r
859 /*----- SHIFT-JIS-->EUC
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a·
\82Ì
\94¼
\8ap
\83J
\83^
\83J
\83i
\82Ì
\8f\88\97\9d -------------------
\r
862 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
863 * char Dt :
\95¶
\8e\9a\r
864 * char *Put :
\83f
\81[
\83^
\83Z
\83b
\83g
\88Ê
\92u
\r
867 * char *
\8e\9f\82Ì
\83f
\81[
\83^
\83Z
\83b
\83g
\88Ê
\92u
\r
868 *----------------------------------------------------------------------------*/
\r
870 static char *ConvSJIStoEUCkanaProc(CODECONVINFO *cInfo, char Dt, char *Put)
\r
875 if(cInfo->KanaCnv == NO)
\r
879 Kcode = 0x8E00 + (uchar)Dt;
\r
880 *Put++ = HIGH8(Kcode) | 0x80;
\r
881 *Put++ = LOW8(Kcode) | 0x80;
\r
886 if(cInfo->KanaPrev != 0)
\r
888 Daku = AskDakuon(cInfo->KanaPrev, Dt);
\r
889 Kcode = HanKataToZen(cInfo->KanaPrev) + Daku;
\r
890 *Put++ = HIGH8(Kcode) | 0x80;
\r
891 *Put++ = LOW8(Kcode) | 0x80;
\r
894 cInfo->KanaPrev = Dt;
\r
896 cInfo->KanaPrev = 0;
\r
899 cInfo->KanaPrev = Dt;
\r
905 /*----- SHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82ðJIS
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· ------------------------------
\r
908 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
911 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
914 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
916 *
\83G
\83X
\83P
\81[
\83v
\83R
\81[
\83h
\82Í
\81A
\8e\9f\82Ì
\82à
\82Ì
\82ð
\8eg
\97p
\82·
\82é
\r
917 *
\8a¿
\8e\9a\8aJ
\8en <ESC>$B
\r
918 *
\94¼
\8ap
\83J
\83i
\8aJ
\8en <ESC>(I
\r
919 *
\8a¿
\8e\9a\8fI
\97¹ <ESC>(B
\r
920 *----------------------------------------------------------------------------*/
\r
922 int ConvSJIStoJIS(CODECONVINFO *cInfo)
\r
930 cInfo->KanaProc = &ConvSJIStoJISkanaProc;
\r
935 Limit = cInfo->Buf + cInfo->BufSize - 5;
\r
937 for(; cInfo->StrLen > 0; cInfo->StrLen--)
\r
945 if(cInfo->KanjiFst == 0)
\r
947 if((((uchar)*Str >= (uchar)0x81) && ((uchar)*Str <= (uchar)0x9F)) ||
\r
948 ((uchar)*Str >= (uchar)0xE0))
\r
950 Put = ConvSJIStoJISkanaProc(cInfo, 0, Put);
\r
951 cInfo->KanjiFst = *Str++;
\r
953 else if(((uchar)*Str >= (uchar)0xA0) && ((uchar)*Str <= (uchar)0xDF))
\r
955 Put = ConvSJIStoJISkanaProc(cInfo, *Str++, Put);
\r
959 Put = ConvSJIStoJISkanaProc(cInfo, 0, Put);
\r
960 if(cInfo->KanjiMode != CONV_ASCII)
\r
965 cInfo->KanjiMode = CONV_ASCII;
\r
972 Put = ConvSJIStoJISkanaProc(cInfo, 0, Put);
\r
973 if((uchar)*Str >= (uchar)0x40)
\r
975 if(cInfo->KanjiMode != CONV_KANJI)
\r
980 cInfo->KanjiMode = CONV_KANJI;
\r
983 Kcode = ConvertIBMExtendedChar(((uchar)cInfo->KanjiFst * 0x100) + (uchar)*Str++);
\r
984 Kcode = _mbcjmstojis(Kcode);
\r
985 *Put++ = HIGH8(Kcode);
\r
986 *Put++ = LOW8(Kcode);
\r
990 if(cInfo->KanjiMode != CONV_ASCII)
\r
995 cInfo->KanjiMode = CONV_ASCII;
\r
997 *Put++ = cInfo->KanjiFst;
\r
1000 cInfo->KanjiFst = 0;
\r
1005 cInfo->OutLen = Put - cInfo->Buf;
\r
1011 /*----- SHIFT-JIS-->JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a·
\82Ì
\94¼
\8ap
\83J
\83^
\83J
\83i
\82Ì
\8f\88\97\9d -------------------
\r
1014 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
1015 * char Dt :
\95¶
\8e\9a\r
1016 * char *Put :
\83f
\81[
\83^
\83Z
\83b
\83g
\88Ê
\92u
\r
1019 * char *
\8e\9f\82Ì
\83f
\81[
\83^
\83Z
\83b
\83g
\88Ê
\92u
\r
1020 *----------------------------------------------------------------------------*/
\r
1022 static char *ConvSJIStoJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put)
\r
1027 if(cInfo->KanaCnv == NO)
\r
1031 if(cInfo->KanjiMode != CONV_KANA)
\r
1036 cInfo->KanjiMode = CONV_KANA;
\r
1038 *Put++ = (uchar)Dt - (uchar)0x80;
\r
1043 if(cInfo->KanaPrev != 0)
\r
1045 if(cInfo->KanjiMode != CONV_KANJI)
\r
1050 cInfo->KanjiMode = CONV_KANJI;
\r
1052 Daku = AskDakuon(cInfo->KanaPrev, Dt);
\r
1053 Kcode = HanKataToZen(cInfo->KanaPrev) + Daku;
\r
1054 *Put++ = HIGH8(Kcode);
\r
1055 *Put++ = LOW8(Kcode);
\r
1058 cInfo->KanaPrev = Dt;
\r
1060 cInfo->KanaPrev = 0;
\r
1063 cInfo->KanaPrev = Dt;
\r
1069 /*----- SHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82ðSamba-HEX
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· ------------------------
\r
1072 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
1075 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
1078 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
1079 *
\95ª
\8a\84\82³
\82ê
\82½
\93ü
\97Í
\95¶
\8e\9a\97ñ
\82Ì
\95Ï
\8a·
\82Í
\83T
\83|
\81[
\83g
\82µ
\82Ä
\82¢
\82È
\82¢
\r
1080 *
\94¼
\8ap
\83J
\83^
\83J
\83i
\82Ì
\95Ï
\8a·
\90Ý
\92è
\82É
\82Í
\91Î
\89\9e\82µ
\82Ä
\82¢
\82È
\82¢
\r
1081 *----------------------------------------------------------------------------*/
\r
1083 int ConvSJIStoSMB_HEX(CODECONVINFO *cInfo)
\r
1093 Limit = cInfo->Buf + cInfo->BufSize - 6;
\r
1095 for(; cInfo->StrLen > 0; cInfo->StrLen--)
\r
1103 if((cInfo->StrLen >= 2) &&
\r
1104 ((((uchar)*Str >= (uchar)0x81) && ((uchar)*Str <= (uchar)0x9F)) ||
\r
1105 ((uchar)*Str >= (uchar)0xE0)))
\r
1107 sprintf(Put, "%c%02x%c%02x", SAMBA_HEX_TAG, (uchar)*Str, SAMBA_HEX_TAG, (uchar)*(Str+1));
\r
1112 else if((uchar)*Str >= (uchar)0x80)
\r
1114 sprintf(Put, "%c%02x", SAMBA_HEX_TAG, (uchar)*Str++);
\r
1122 cInfo->OutLen = Put - cInfo->Buf;
\r
1128 /*----- SHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82ðSamba-CAP
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· ------------------------
\r
1131 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
1134 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
1137 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
1138 *
\95ª
\8a\84\82³
\82ê
\82½
\93ü
\97Í
\95¶
\8e\9a\97ñ
\82Ì
\95Ï
\8a·
\82Í
\83T
\83|
\81[
\83g
\82µ
\82Ä
\82¢
\82È
\82¢
\r
1139 *----------------------------------------------------------------------------*/
\r
1141 int ConvSJIStoSMB_CAP(CODECONVINFO *cInfo)
\r
1151 Limit = cInfo->Buf + cInfo->BufSize - 6;
\r
1153 for(; cInfo->StrLen > 0; cInfo->StrLen--)
\r
1161 if((uchar)*Str >= (uchar)0x80)
\r
1163 sprintf(Put, "%c%02x", SAMBA_HEX_TAG, (uchar)*Str++);
\r
1171 cInfo->OutLen = Put - cInfo->Buf;
\r
1177 /*-----
\82P
\83o
\83C
\83g
\83J
\83^
\83J
\83i
\82ðJIS
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· ---------------------------------
\r
1180 * char Ch :
\82P
\83o
\83C
\83g
\83J
\83^
\83J
\83i
\83R
\81[
\83h
\r
1183 * int JIS
\8a¿
\8e\9a\83R
\81[
\83h
\r
1184 *----------------------------------------------------------------------------*/
\r
1186 static int HanKataToZen(char Ch)
\r
1188 static const int Katakana[] = {
\r
1189 0x2121, 0x2123, 0x2156, 0x2157, 0x2122, 0x2126, 0x2572, 0x2521,
\r
1190 0x2523, 0x2525, 0x2527, 0x2529, 0x2563, 0x2565, 0x2567, 0x2543,
\r
1191 0x213C, 0x2522, 0x2524, 0x2526, 0x2528, 0x252A, 0x252B, 0x252D,
\r
1192 0x252F, 0x2531, 0x2533, 0x2535, 0x2537, 0x2539, 0x253B, 0x253D,
\r
1193 0x253F, 0x2541, 0x2544, 0x2546, 0x2548, 0x254A, 0x254B, 0x254C,
\r
1194 0x254D, 0x254E, 0x254F, 0x2552, 0x2555, 0x2558, 0x255B, 0x255E,
\r
1195 0x255F, 0x2560, 0x2561, 0x2562, 0x2564, 0x2566, 0x2568, 0x2569,
\r
1196 0x256A, 0x256B, 0x256C, 0x256D, 0x256F, 0x2573, 0x212B, 0x212C
\r
1199 return(Katakana[(uchar)Ch - (uchar)0xA0]);
\r
1203 /*-----
\91÷
\89¹
\81^
\94¼
\91÷
\89¹
\82É
\82È
\82é
\95¶
\8e\9a\82©
\83`
\83F
\83b
\83N --------------------------------------
\r
1206 * char Ch :
\82P
\83o
\83C
\83g
\83J
\83^
\83J
\83i
\83R
\81[
\83h
\r
1207 * char Daku :
\91÷
\93_
\81^
\94¼
\91÷
\93_
\r
1210 * int
\95¶
\8e\9a\83R
\81[
\83h
\82É
\89Á
\82¦
\82é
\92l (0=
\91÷
\89¹
\81^
\94¼
\91÷
\89¹
\82É
\82È
\82ç
\82È
\82¢)
\r
1211 *----------------------------------------------------------------------------*/
\r
1213 static int AskDakuon(char Ch, char Daku)
\r
1218 if((uchar)Daku == (uchar)0xDE)
\r
1220 if((((uchar)Ch >= (uchar)0xB6) && ((uchar)Ch <= (uchar)0xC4)) ||
\r
1221 (((uchar)Ch >= (uchar)0xCA) && ((uchar)Ch <= (uchar)0xCE)))
\r
1226 else if((uchar)Daku == (uchar)0xDF)
\r
1228 if(((uchar)Ch >= (uchar)0xCA) && ((uchar)Ch <= (uchar)0xCE))
\r
1247 /*-----
\95¶
\8e\9a\97ñ
\82Ì
\8a¿
\8e\9a\83R
\81[
\83h
\82ð
\92²
\82×
\81AShift-JIS
\82É
\95Ï
\8a· -----------------------------
\r
1250 * char *Text :
\95¶
\8e\9a\97ñ
\r
1251 * int Pref : SJIS/EUC
\82Ì
\97D
\90æ
\8ew
\92è
\r
1252 \81\96 KANJI_SJIS / KANJI_EUC / KANJI_NOCNV=SJIS/EUC
\82Ì
\83`
\83F
\83b
\83N
\82Í
\82µ
\82È
\82¢
\r
1256 *----------------------------------------------------------------------------*/
\r
1258 void ConvAutoToSJIS(char *Text, int Pref)
\r
1262 CODECONVINFO cInfo;
\r
1264 Code = CheckKanjiCode(Text, strlen(Text), Pref);
\r
1265 if(Code != KANJI_SJIS)
\r
1267 Buf = malloc(strlen(Text)+1);
\r
1270 InitCodeConvInfo(&cInfo);
\r
1271 cInfo.KanaCnv = NO;
\r
1273 cInfo.StrLen = strlen(Text);
\r
1275 cInfo.BufSize = strlen(Text);
\r
1280 ConvJIStoSJIS(&cInfo);
\r
1284 ConvEUCtoSJIS(&cInfo);
\r
1288 *(Buf + cInfo.OutLen) = NUL;
\r
1289 strcpy(Text, Buf);
\r
1297 /*-----
\8eg
\82í
\82ê
\82Ä
\82¢
\82é
\8a¿
\8e\9a\83R
\81[
\83h
\82ð
\92²
\82×
\82é ----------------------------------------
\r
1300 * char *Text :
\95¶
\8e\9a\97ñ
\r
1301 * int Size :
\95¶
\8e\9a\97ñ
\82Ì
\92·
\82³
\r
1302 * int Pref : SJIS/EUC
\82Ì
\97D
\90æ
\8ew
\92è
\r
1303 \81\96 KANJI_SJIS / KANJI_EUC / KANJI_NOCNV=SJIS/EUC
\82Ì
\83`
\83F
\83b
\83N
\82Í
\82µ
\82È
\82¢
\r
1306 * int
\8a¿
\8e\9a\83R
\81[
\83h (KANJI_xxx)
\r
1307 *----------------------------------------------------------------------------*/
\r
1309 int CheckKanjiCode(char *Text, int Size, int Pref)
\r
1321 Btm = Text + Size;
\r
1323 /* JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82Ì
\83`
\83F
\83b
\83N */
\r
1325 while((Pos = memchr(Pos, 0x1b, Btm-Pos-2)) != NULL)
\r
1328 if((memcmp(Pos, "$B", 2) == 0) || /* <ESC>$B */
\r
1329 (memcmp(Pos, "$@", 2) == 0) || /* <ESC>$@ */
\r
1330 (memcmp(Pos, "(I", 2) == 0)) /* <ESC>(I */
\r
1337 /* EUC
\82ÆSHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82Ì
\83`
\83F
\83b
\83N */
\r
1340 if(Pref != KANJI_NOCNV)
\r
1346 PointSJIS = CheckOnSJIS(Pos, Btm);
\r
1347 PointEUC = CheckOnEUC(Pos, Btm);
\r
1348 if(PointSJIS > PointEUC)
\r
1353 if(PointSJIS < PointEUC)
\r
1358 if((Pos = memchr(Pos, '\n', Btm-Pos)) == NULL)
\r
1371 /*----- SHIFT-JIS
\83R
\81[
\83h
\82Ì
\89Â
\94\
\90«
\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N --------------------------------
\r
1374 * uchar *Pos :
\95¶
\8e\9a\97ñ
\r
1375 * uchar *Btm :
\95¶
\8e\9a\97ñ
\82Ì
\96\96\94ö
\r
1381 * High 81-FF (A0-DF
\82Í
\94¼
\8ap) (EB
\88È
\8d~
\82Í
\82Ù
\82Æ
\82ñ
\82Ç
\96³
\82¢)
\r
1383 *----------------------------------------------------------------------------*/
\r
1385 static int CheckOnSJIS(uchar *Pos, uchar *Btm)
\r
1392 while((Point > 0) && (Pos < Btm) && (*Pos != '\n'))
\r
1394 if(FstOnTwo == YES)
\r
1396 if((*Pos < 0x40) || (*Pos > 0xFC)) /* 2
\83o
\83C
\83g
\96Ú
\82Í 0x40
\81`0xFC */
\r
1400 else if(*Pos >= 0x81)
\r
1402 if((*Pos < 0xA0) || (*Pos > 0xDF)) /*
\94¼
\8ap
\83J
\83i
\82Å
\82È
\82¯
\82ê
\82Î */
\r
1404 if(*Pos >= 0xEB) /* 1
\83o
\83C
\83g
\96Ú
\82Í0xEB
\88È
\8d~
\82Í
\82Ù
\82Æ
\82ñ
\82Ç
\96³
\82¢ */
\r
1411 if(FstOnTwo == YES) /*
\82P
\83o
\83C
\83g
\96Ú
\82Å
\8fI
\82í
\82Á
\82Ä
\82¢
\82é
\82Ì
\82Í
\82¨
\82©
\82µ
\82¢ */
\r
1418 /*----- EUC
\83R
\81[
\83h
\82Ì
\89Â
\94\
\90«
\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N -------------------------------------
\r
1421 * uchar *Pos :
\95¶
\8e\9a\97ñ
\r
1422 * uchar *Btm :
\95¶
\8e\9a\97ñ
\82Ì
\96\96\94ö
\r
1430 *----------------------------------------------------------------------------*/
\r
1432 static int CheckOnEUC(uchar *Pos, uchar *Btm)
\r
1439 while((Point > 0) && (Pos < Btm) && (*Pos != '\n'))
\r
1443 if((*Pos < 0xA1) || (*Pos > 0xFE)) /* 2
\83o
\83C
\83g
\96Ú
\82Í 0xA1
\81`0xFE */
\r
1447 else if(FstOnTwo == 2) /*
\94¼
\8ap
\83J
\83i */
\r
1449 if((*Pos < 0xA0) || (*Pos > 0xDF)) /* 2
\83o
\83C
\83g
\96Ú
\82Í 0xA0
\81`0xDF */
\r
1455 if(*Pos == 0x8E) /* 0x8E??
\82Í
\94¼
\8ap
\83J
\83i */
\r
1457 else if((*Pos >= 0xA1) && (*Pos <= 0xFE))
\r
1462 if(FstOnTwo != 0) /*
\82P
\83o
\83C
\83g
\96Ú
\82Å
\8fI
\82í
\82Á
\82Ä
\82¢
\82é
\82Ì
\82Í
\82¨
\82©
\82µ
\82¢ */
\r
1469 // UTF-8N
\91Î
\89\9e \82±
\82±
\82©
\82ç
\81«
\r
1470 /*----- UTF-8N
\8a¿
\8e\9a\83R
\81[
\83h
\82ðSHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· ------------------------------
\r
1473 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
1476 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
1479 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
1480 *----------------------------------------------------------------------------*/
\r
1482 int ConvUTF8NtoSJIS(CODECONVINFO *cInfo)
\r
1486 // char temp_string[2048];
\r
1487 int string_length;
\r
1489 //
\91å
\82«
\82¢
\83T
\83C
\83Y
\82É
\91Î
\89\9e\r
1490 //
\8fI
\92[
\82ÌNULL
\82ð
\8aÜ
\82Þ
\83o
\83O
\82ð
\8fC
\90³
\r
1499 //
\90¶
\90¬
\82³
\82ê
\82é
\92\86\8aÔ
\83R
\81[
\83h
\82Ì
\83T
\83C
\83Y
\82ð
\92²
\82×
\82é
\r
1500 // string_length = MultiByteToWideChar(
\r
1501 // CP_UTF8, //
\95Ï
\8a·
\90æ
\95¶
\8e\9a\83R
\81[
\83h
\r
1502 // 0, //
\83t
\83\89\83O(0:
\82È
\82µ)
\r
1503 // cInfo->Str, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\r
1504 // -1, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\83o
\83C
\83g
\90\94(-1:
\8e©
\93®)
\r
1505 // NULL, //
\95Ï
\8a·
\82µ
\82½
\95¶
\8e\9a\97ñ
\82Ì
\8ai
\94[
\90æ
\r
1506 // 0 //
\8ai
\94[
\90æ
\83T
\83C
\83Y
\r
1508 //
\91O
\89ñ
\82Ì
\95Ï
\8a·
\95s
\94\
\82È
\8ec
\82è
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\93ü
\97Í
\82Ì
\90æ
\93ª
\82É
\8c\8b\8d\87\r
1509 SrcLength = cInfo->StrLen + cInfo->EscUTF8Len;
\r
1510 if(!(pSrc = (char*)malloc(sizeof(char) * (SrcLength + 1))))
\r
1512 *(cInfo->Buf) = '\0';
\r
1513 cInfo->BufSize = 0;
\r
1516 memcpy(pSrc, cInfo->EscUTF8, sizeof(char) * cInfo->EscUTF8Len);
\r
1517 memcpy(pSrc + cInfo->EscUTF8Len, cInfo->Str, sizeof(char) * cInfo->StrLen);
\r
1518 *(pSrc + SrcLength) = '\0';
\r
1519 // UTF-8
\82Ì
\8fê
\8d\87\81A
\95s
\8a®
\91S
\82È
\95¶
\8e\9a\82Í
\8fí
\82É
\95Ï
\8a·
\82³
\82ê
\82È
\82¢
\r
1520 UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pSrc, SrcLength, NULL, 0);
\r
1522 //
\83T
\83C
\83Y0 or
\83o
\83b
\83t
\83@
\83T
\83C
\83Y
\82æ
\82è
\91å
\82«
\82¢
\8fê
\8d\87\82Í
\r
1523 // cInfo->Buf
\82Ì
\8dÅ
\8f\89\82É'\0'
\82ð
\93ü
\82ê
\82Ä
\81A
\r
1524 // cInfo->BufSize
\82É0
\82ð
\93ü
\82ê
\82Ä
\95Ô
\82·
\81B
\r
1525 // if( string_length == 0 ||
\r
1526 // string_length >= 1024 ){
\r
1527 // *(cInfo->Buf) = '\0';
\r
1528 // cInfo->BufSize = 0;
\r
1529 // return(Continue);
\r
1531 if(!(pUTF16 = (wchar_t*)malloc(sizeof(wchar_t) * UTF16Length)))
\r
1534 *(cInfo->Buf) = '\0';
\r
1535 cInfo->BufSize = 0;
\r
1539 //
\92\86\8aÔ
\83R
\81[
\83h(unicode)
\82É
\95Ï
\8a·
\r
1540 // MultiByteToWideChar(
\r
1541 // CP_UTF8, //
\95Ï
\8a·
\90æ
\95¶
\8e\9a\83R
\81[
\83h
\r
1542 // 0, //
\83t
\83\89\83O(0:
\82È
\82µ)
\r
1543 // cInfo->Str, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\r
1544 // -1, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\83o
\83C
\83g
\90\94(-1:
\8e©
\93®)
\r
1545 // (unsigned short *)temp_string, //
\95Ï
\8a·
\82µ
\82½
\95¶
\8e\9a\97ñ
\82Ì
\8ai
\94[
\90æ
\r
1546 // 1024 //
\8ai
\94[
\90æ
\83T
\83C
\83Y
\r
1548 MultiByteToWideChar(CP_UTF8, 0, pSrc, SrcLength, pUTF16, UTF16Length);
\r
1550 //
\90¶
\90¬
\82³
\82ê
\82éUTF-8
\83R
\81[
\83h
\82Ì
\83T
\83C
\83Y
\82ð
\92²
\82×
\82é
\r
1551 // string_length = WideCharToMultiByte(
\r
1552 // CP_ACP, //
\95Ï
\8a·
\90æ
\95¶
\8e\9a\83R
\81[
\83h
\r
1553 // 0, //
\83t
\83\89\83O(0:
\82È
\82µ)
\r
1554 // (unsigned short *)temp_string, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\r
1555 // -1, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\83o
\83C
\83g
\90\94(-1:
\8e©
\93®)
\r
1556 // NULL, //
\95Ï
\8a·
\82µ
\82½
\95¶
\8e\9a\97ñ
\82Ì
\8ai
\94[
\90æ
\r
1557 // 0, //
\8ai
\94[
\90æ
\83T
\83C
\83Y
\r
1560 string_length = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL);
\r
1562 //
\83T
\83C
\83Y0 or
\8fo
\97Í
\83o
\83b
\83t
\83@
\83T
\83C
\83Y
\82æ
\82è
\91å
\82«
\82¢
\8fê
\8d\87\82Í
\81A
\r
1563 // cInfo->Buf
\82Ì
\8dÅ
\8f\89\82É'\0'
\82ð
\93ü
\82ê
\82Ä
\81A
\r
1564 // cInfo->BufSize
\82É0
\82ð
\93ü
\82ê
\82Ä
\95Ô
\82·
\81B
\r
1565 // if( string_length == 0 ||
\r
1566 // string_length >= cInfo->BufSize ){
\r
1567 // *(cInfo->Buf) = '\0';
\r
1568 // cInfo->BufSize = 0;
\r
1569 // return(Continue);
\r
1572 //
\8fo
\97Í
\83T
\83C
\83Y
\82ð
\90Ý
\92è
\r
1573 // cInfo->OutLen = string_length;
\r
1575 // UTF-8
\83R
\81[
\83h
\82É
\95Ï
\8a·
\r
1576 // WideCharToMultiByte(
\r
1577 // CP_ACP, //
\95Ï
\8a·
\90æ
\95¶
\8e\9a\83R
\81[
\83h
\r
1578 // 0, //
\83t
\83\89\83O(0:
\82È
\82µ)
\r
1579 // (unsigned short *)temp_string, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\r
1580 // -1, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\83o
\83C
\83g
\90\94(-1:
\8e©
\93®)
\r
1581 // cInfo->Buf, //
\95Ï
\8a·
\82µ
\82½
\95¶
\8e\9a\97ñ
\82Ì
\8ai
\94[
\90æ(BOM:3bytes)
\r
1582 // cInfo->BufSize, //
\8ai
\94[
\90æ
\83T
\83C
\83Y
\r
1585 cInfo->OutLen = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL);
\r
1586 //
\83o
\83b
\83t
\83@
\82É
\8eû
\82Ü
\82ç
\82È
\82¢
\82½
\82ß
\95Ï
\8a·
\95¶
\8e\9a\90\94\82ð
\94¼
\8c¸
\r
1587 while(cInfo->OutLen == 0 && UTF16Length > 0)
\r
1589 UTF16Length = UTF16Length / 2;
\r
1590 cInfo->OutLen = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL);
\r
1592 //
\95Ï
\8a·
\82³
\82ê
\82½
\8c³
\82Ì
\95¶
\8e\9a\97ñ
\82Å
\82Ì
\95¶
\8e\9a\90\94\82ð
\8eæ
\93¾
\r
1593 Count = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL);
\r
1594 //
\95Ï
\8a·
\89Â
\94\
\82È
\8ec
\82è
\82Ì
\95¶
\8e\9a\90\94\82ð
\8eæ
\93¾
\r
1595 UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pSrc + Count, SrcLength - Count, NULL, 0);
\r
1596 cInfo->Str += Count - cInfo->EscUTF8Len;
\r
1597 cInfo->StrLen -= Count - cInfo->EscUTF8Len;
\r
1598 cInfo->EscUTF8Len = 0;
\r
1599 if(UTF16Length > 0)
\r
1603 //
\95Ï
\8a·
\95s
\94\
\82È
\82½
\82ß
\8e\9f\82Ì
\93ü
\97Í
\82Ì
\90æ
\93ª
\82É
\8c\8b\8d\87\r
1604 memcpy(cInfo->EscUTF8, cInfo->Str, sizeof(char) * cInfo->StrLen);
\r
1605 cInfo->EscUTF8Len = cInfo->StrLen;
\r
1606 cInfo->Str += cInfo->StrLen;
\r
1607 cInfo->StrLen = 0;
\r
1617 /*----- SHIFT-JIS
\8a¿
\8e\9a\83R
\81[
\83h
\82ðUTF-8N
\8a¿
\8e\9a\83R
\81[
\83h
\82É
\95Ï
\8a· ------------------------------
\r
1620 * CODECONVINFO *cInfo :
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a·
\8fî
\95ñ
\r
1623 * int
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O (YES/NO)
\r
1626 *
\82
\82è
\95Ô
\82µ
\83t
\83\89\83O
\82ªYES
\82Ì
\8e\9e\82Í
\81AcInfo
\82Ì
\93à
\97e
\82ð
\95Ï
\82¦
\82¸
\82É
\82à
\82¤
\88ê
\93x
\8cÄ
\82Ô
\82±
\82Æ
\r
1627 *----------------------------------------------------------------------------*/
\r
1628 int ConvSJIStoUTF8N(CODECONVINFO *cInfo)
\r
1632 // char temp_string[2048];
\r
1633 int string_length;
\r
1635 //
\91å
\82«
\82¢
\83T
\83C
\83Y
\82É
\91Î
\89\9e\r
1636 //
\8fI
\92[
\82ÌNULL
\82ð
\8aÜ
\82Þ
\83o
\83O
\82ð
\8fC
\90³
\r
1645 //
\90¶
\90¬
\82³
\82ê
\82é
\92\86\8aÔ
\83R
\81[
\83h
\82Ì
\83T
\83C
\83Y
\82ð
\92²
\82×
\82é
\r
1646 // string_length = MultiByteToWideChar(
\r
1647 // CP_ACP, //
\95Ï
\8a·
\90æ
\95¶
\8e\9a\83R
\81[
\83h
\r
1648 // 0, //
\83t
\83\89\83O(0:
\82È
\82µ)
\r
1649 // cInfo->Str, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\r
1650 // -1, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\83o
\83C
\83g
\90\94(-1:
\8e©
\93®)
\r
1651 // NULL, //
\95Ï
\8a·
\82µ
\82½
\95¶
\8e\9a\97ñ
\82Ì
\8ai
\94[
\90æ
\r
1652 // 0 //
\8ai
\94[
\90æ
\83T
\83C
\83Y
\r
1654 //
\91O
\89ñ
\82Ì
\95Ï
\8a·
\95s
\94\
\82È
\8ec
\82è
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\93ü
\97Í
\82Ì
\90æ
\93ª
\82É
\8c\8b\8d\87\r
1655 SrcLength = cInfo->StrLen + cInfo->EscUTF8Len;
\r
1656 if(!(pSrc = (char*)malloc(sizeof(char) * (SrcLength + 1))))
\r
1658 *(cInfo->Buf) = '\0';
\r
1659 cInfo->BufSize = 0;
\r
1662 memcpy(pSrc, cInfo->EscUTF8, sizeof(char) * cInfo->EscUTF8Len);
\r
1663 memcpy(pSrc + cInfo->EscUTF8Len, cInfo->Str, sizeof(char) * cInfo->StrLen);
\r
1664 *(pSrc + SrcLength) = '\0';
\r
1665 // Shift_JIS
\82Ì
\8fê
\8d\87\81A
\95s
\8a®
\91S
\82È
\95¶
\8e\9a\82Å
\82à
\95Ï
\8a·
\82³
\82ê
\82é
\82±
\82Æ
\82ª
\82 \82é
\82½
\82ß
\81A
\96\96\94ö
\82Ì
\95s
\8a®
\91S
\82È
\95\94\95ª
\82ð
\8dí
\82é
\r
1667 while(Count < SrcLength)
\r
1669 if(((unsigned char)*(pSrc + Count) >= 0x81 && (unsigned char)*(pSrc + Count) <= 0x9f) || (unsigned char)*(pSrc + Count) >= 0xe0)
\r
1671 if((unsigned char)*(pSrc + Count + 1) >= 0x40)
\r
1675 if(Count + 2 > SrcLength)
\r
1683 SrcLength = Count;
\r
1684 UTF16Length = MultiByteToWideChar(CP_ACP, 0, pSrc, SrcLength, NULL, 0);
\r
1686 //
\83T
\83C
\83Y0 or
\83o
\83b
\83t
\83@
\83T
\83C
\83Y
\82æ
\82è
\91å
\82«
\82¢
\8fê
\8d\87\82Í
\81A
\r
1687 // cInfo->Buf
\82Ì
\8dÅ
\8f\89\82É'\0'
\82ð
\93ü
\82ê
\82Ä
\81A
\r
1688 // cInfo->BufSize
\82É0
\82ð
\93ü
\82ê
\82Ä
\95Ô
\82·
\81B
\r
1689 // if( string_length == 0 ||
\r
1690 // string_length >= 1024 ){
\r
1691 // *(cInfo->Buf) = '\0';
\r
1692 // cInfo->BufSize = 0;
\r
1693 // return(Continue);
\r
1695 if(!(pUTF16 = (wchar_t*)malloc(sizeof(wchar_t) * UTF16Length)))
\r
1698 *(cInfo->Buf) = '\0';
\r
1699 cInfo->BufSize = 0;
\r
1703 //
\92\86\8aÔ
\83R
\81[
\83h(unicode)
\82É
\95Ï
\8a·
\r
1704 // MultiByteToWideChar(
\r
1705 // CP_ACP, //
\95Ï
\8a·
\90æ
\95¶
\8e\9a\83R
\81[
\83h
\r
1706 // 0, //
\83t
\83\89\83O(0:
\82È
\82µ)
\r
1707 // cInfo->Str, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\r
1708 // -1, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\83o
\83C
\83g
\90\94(-1:
\8e©
\93®)
\r
1709 // (unsigned short *)temp_string, //
\95Ï
\8a·
\82µ
\82½
\95¶
\8e\9a\97ñ
\82Ì
\8ai
\94[
\90æ
\r
1710 // 1024 //
\8ai
\94[
\90æ
\83T
\83C
\83Y
\r
1712 MultiByteToWideChar(CP_ACP, 0, pSrc, SrcLength, pUTF16, UTF16Length);
\r
1714 //
\90¶
\90¬
\82³
\82ê
\82éUTF-8
\83R
\81[
\83h
\82Ì
\83T
\83C
\83Y
\82ð
\92²
\82×
\82é
\r
1715 // string_length = WideCharToMultiByte(
\r
1716 // CP_UTF8, //
\95Ï
\8a·
\90æ
\95¶
\8e\9a\83R
\81[
\83h
\r
1717 // 0, //
\83t
\83\89\83O(0:
\82È
\82µ)
\r
1718 // (unsigned short *)temp_string, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\r
1719 // -1, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\83o
\83C
\83g
\90\94(-1:
\8e©
\93®)
\r
1720 // NULL, //
\95Ï
\8a·
\82µ
\82½
\95¶
\8e\9a\97ñ
\82Ì
\8ai
\94[
\90æ
\r
1721 // 0, //
\8ai
\94[
\90æ
\83T
\83C
\83Y
\r
1724 string_length = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL);
\r
1726 //
\83T
\83C
\83Y0 or
\8fo
\97Í
\83o
\83b
\83t
\83@
\83T
\83C
\83Y
\82æ
\82è
\91å
\82«
\82¢
\8fê
\8d\87\82Í
\81A
\r
1727 // cInfo->Buf
\82Ì
\8dÅ
\8f\89\82É'\0'
\82ð
\93ü
\82ê
\82Ä
\81A
\r
1728 // cInfo->BufSize
\82É0
\82ð
\93ü
\82ê
\82Ä
\95Ô
\82·
\81B
\r
1729 // if( string_length == 0 ||
\r
1730 // string_length >= cInfo->BufSize ){
\r
1731 // *(cInfo->Buf) = '\0';
\r
1732 // cInfo->BufSize = 0;
\r
1733 // return(Continue);
\r
1736 //
\8fo
\97Í
\83T
\83C
\83Y
\82ð
\90Ý
\92è
\r
1737 // cInfo->OutLen = string_length;
\r
1740 //
\81«
\95t
\82¯
\82¿
\82á
\82¾
\82ß
\83R
\83}
\83\93\83h
\82É
\82à
\92Ç
\89Á
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\r
1741 //
\8fo
\97Í
\95¶
\8e\9a\97ñ
\82Ì
\90æ
\93ª
\82ÉBOM(byte order mark)
\82ð
\82Â
\82¯
\82é
\r
1742 *(cInfo->Buf) = (char)0xef;
\r
1743 *(cInfo->Buf+1) = (char)0xbb;
\r
1744 *(cInfo->Buf+2) = (char)0xbf;
\r
1747 // UTF-8
\83R
\81[
\83h
\82É
\95Ï
\8a·
\r
1748 // WideCharToMultiByte(
\r
1749 // CP_UTF8, //
\95Ï
\8a·
\90æ
\95¶
\8e\9a\83R
\81[
\83h
\r
1750 // 0, //
\83t
\83\89\83O(0:
\82È
\82µ)
\r
1751 // (unsigned short *)temp_string, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\r
1752 // -1, //
\95Ï
\8a·
\8c³
\95¶
\8e\9a\97ñ
\83o
\83C
\83g
\90\94(-1:
\8e©
\93®)
\r
1753 // cInfo->Buf, //
\95Ï
\8a·
\82µ
\82½
\95¶
\8e\9a\97ñ
\82Ì
\8ai
\94[
\90æ(BOM:3bytes)
\r
1754 // cInfo->BufSize, //
\8ai
\94[
\90æ
\83T
\83C
\83Y
\r
1757 cInfo->OutLen = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL);
\r
1758 //
\83o
\83b
\83t
\83@
\82É
\8eû
\82Ü
\82ç
\82È
\82¢
\82½
\82ß
\95Ï
\8a·
\95¶
\8e\9a\90\94\82ð
\94¼
\8c¸
\r
1759 while(cInfo->OutLen == 0 && UTF16Length > 0)
\r
1761 UTF16Length = UTF16Length / 2;
\r
1762 cInfo->OutLen = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL);
\r
1764 //
\95Ï
\8a·
\82³
\82ê
\82½
\8c³
\82Ì
\95¶
\8e\9a\97ñ
\82Å
\82Ì
\95¶
\8e\9a\90\94\82ð
\8eæ
\93¾
\r
1765 Count = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL);
\r
1766 //
\95Ï
\8a·
\89Â
\94\
\82È
\8ec
\82è
\82Ì
\95¶
\8e\9a\90\94\82ð
\8eæ
\93¾
\r
1767 UTF16Length = MultiByteToWideChar(CP_ACP, 0, pSrc + Count, SrcLength - Count, NULL, 0);
\r
1768 cInfo->Str += Count - cInfo->EscUTF8Len;
\r
1769 cInfo->StrLen -= Count - cInfo->EscUTF8Len;
\r
1770 cInfo->EscUTF8Len = 0;
\r
1771 if(UTF16Length > 0)
\r
1775 //
\95Ï
\8a·
\95s
\94\
\82È
\82½
\82ß
\8e\9f\82Ì
\93ü
\97Í
\82Ì
\90æ
\93ª
\82É
\8c\8b\8d\87\r
1776 memcpy(cInfo->EscUTF8, cInfo->Str, sizeof(char) * cInfo->StrLen);
\r
1777 cInfo->EscUTF8Len = cInfo->StrLen;
\r
1778 cInfo->Str += cInfo->StrLen;
\r
1779 cInfo->StrLen = 0;
\r
1788 // UTF-8N
\91Î
\89\9e \82±
\82±
\82Ü
\82Å
\81ª
\r
1791 /*----- IBM
\8ag
\92£
\8a¿
\8e\9a\82ðNEC
\91I
\92èIBM
\8ag
\92£
\8a¿
\8e\9a\93\99\82É
\95Ï
\8a· -------------------------------
\r
1794 * code
\8a¿
\8e\9a\83R
\81[
\83h
\r
1797 * int
\8a¿
\8e\9a\83R
\81[
\83h
\r
1798 *----------------------------------------------------------------------------*/
\r
1799 static int ConvertIBMExtendedChar(int code)
\r
1801 if((code >= 0xfa40) && (code <= 0xfa49)) code -= (0xfa40 - 0xeeef);
\r
1802 else if((code >= 0xfa4a) && (code <= 0xfa53)) code -= (0xfa4a - 0x8754);
\r
1803 else if((code >= 0xfa54) && (code <= 0xfa57)) code -= (0xfa54 - 0xeef9);
\r
1804 else if(code == 0xfa58) code = 0x878a;
\r
1805 else if(code == 0xfa59) code = 0x8782;
\r
1806 else if(code == 0xfa5a) code = 0x8784;
\r
1807 else if(code == 0xfa5b) code = 0x879a;
\r
1808 else if((code >= 0xfa5c) && (code <= 0xfa7e)) code -= (0xfa5c - 0xed40);
\r
1809 else if((code >= 0xfa80) && (code <= 0xfa9b)) code -= (0xfa80 - 0xed63);
\r
1810 else if((code >= 0xfa9c) && (code <= 0xfafc)) code -= (0xfa9c - 0xed80);
\r
1811 else if((code >= 0xfb40) && (code <= 0xfb5b)) code -= (0xfb40 - 0xede1);
\r
1812 else if((code >= 0xfb5c) && (code <= 0xfb7e)) code -= (0xfb5c - 0xee40);
\r
1813 else if((code >= 0xfb80) && (code <= 0xfb9b)) code -= (0xfb80 - 0xee63);
\r
1814 else if((code >= 0xfb9c) && (code <= 0xfbfc)) code -= (0xfb9c - 0xee80);
\r
1815 else if((code >= 0xfc40) && (code <= 0xfc4b)) code -= (0xfc40 - 0xeee1);
\r