home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 8 Other
/
08-Other.zip
/
rxjis096.zip
/
pctojis.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-05-26
|
10KB
|
436 lines
/* product name: RXJIS */
/* Version: 0.94 */
/* author: YANO Takashi */
/* target: OS/2 Warp J3.0+ (J2.1 is possible) */
/* source name: PCTOJIS.CPP */
/* address: tyano@ca2.so-net.or.jp or tyano@yamato.ibm.co.jp */
/* comment: RXJIS is a utility functions for REXX. */
/* This header file is a interface to be called from */
/* C/C++. */
/* history: 1997-08-05 0.90 */
/* 1998-05-26 0.94 */
/* */
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
#include <os2.h>
#include "ibm2jis.hpp"
#include "pc2jis.hpp"
#include "pctojis.hpp"
BOOL _Export InJis90 = FALSE;
BOOL _Export DbcsVec[UCHAR_MAX+1];
wchar_t _Export
OldJisToNewJis(
wchar_t pccode) {
switch (pccode) {
case 0xe9cb: /* Θ╦ */
pccode = 0x88b1;
break;
case 0x88b1: /* ê▒ */
pccode = 0xe9cb;
break;
case 0xe9f2: /* Θ≥ */
pccode = 0x89a7;
break;
case 0x89a7: /* ëº */
pccode = 0xe9f2;
break;
case 0xe579: /* σy */
pccode = 0x8a61;
break;
case 0x8a61: /* èa */
pccode = 0xe579;
break;
case 0x9d98: /* ¥ÿ */
pccode = 0x8a68;
break;
case 0x8a68: /* èh */
pccode = 0x9d98;
break;
case 0xe27d: /* Γ} */
pccode = 0x8a96;
break;
case 0x8a96: /* èû */
pccode = 0xe27d;
break;
case 0x9ff3: /* IJ */
pccode = 0x8ac1;
break;
case 0x8ac1: /* è┴ */
pccode = 0x9ff3;
break;
case 0xe67c: /* µ| */
pccode = 0x8ad0;
break;
case 0x8ad0: /* è╨ */
pccode = 0xe67c;
break;
case 0xe8f2: /* Φ≥ */
pccode = 0x8c7a;
break;
case 0x8c7a: /* îz */
pccode = 0xe8f2;
break;
case 0xe1e6: /* ßµ */
pccode = 0x8d7b;
break;
case 0x8d7b: /* ì{ */
pccode = 0xe1e6;
break;
case 0xe541: /* σA */
pccode = 0x8ec7;
break;
case 0x8ec7: /* Ä╟ */
pccode = 0xe541;
break;
case 0xe8d5: /* Φ╒ */
pccode = 0x9078;
break;
case 0x9078: /* Éx */
pccode = 0xe8d5;
break;
case 0xe6cb: /* µ╦ */
pccode = 0x9147;
break;
case 0x9147: /* æG */
pccode = 0xe6cb;
break;
case 0x9ae2: /* ÜΓ */
pccode = 0x92d9;
break;
case 0x92d9: /* Æ┘ */
pccode = 0x9ae2;
break;
case 0xe1e8: /* ßΦ */
pccode = 0x9376;
break;
case 0x9376: /* ôv */
pccode = 0xe1e8;
break;
case 0x9e8d: /* ₧ì */
pccode = 0x938e;
break;
case 0x938e: /* ôÄ */
pccode = 0x9e8d;
break;
case 0x9fb7: /* ƒ╖ */
pccode = 0x9393;
break;
case 0x9393: /* ôô */
pccode = 0x9fb7;
break;
case 0xe78e: /* τÄ */
pccode = 0x93f4;
break;
case 0x93f4: /* ô⌠ */
pccode = 0xe78e;
break;
case 0xe5a2: /* σó */
pccode = 0x9488;
break;
case 0x9488: /* öê */
pccode = 0xe5a2;
break;
case 0x9e77: /* ₧w */
pccode = 0x954f;
break;
case 0x954f: /* òO */
pccode = 0x9e77;
break;
case 0x98d4: /* ÿ╘ */
pccode = 0x9699;
break;
case 0x9699: /* ûÖ */
pccode = 0x98d4;
break;
case 0xe54d: /* σM */
pccode = 0x96f7;
break;
case 0x96f7: /* û≈ */
pccode = 0xe54d;
break;
case 0xe2c4: /* Γ─ */
pccode = 0x9855;
break;
case 0x9855: /* ÿU */
pccode = 0xe2c4;
break;
case 0xea9f: /* Ωƒ */
pccode = 0x8bc4;
break;
case 0x8bc4: /* ï─ */
pccode = 0xea9f;
break;
case 0xeaa0: /* Ωá */
pccode = 0x968a;
break;
case 0x968a: /* ûè */
pccode = 0xeaa0;
break;
case 0xeaa1: /* Ωí */
pccode = 0x9779;
break;
case 0x9779: /* ùy */
pccode = 0xeaa1;
break;
case 0xeaa2: /* Ωó */
pccode = 0xe0f4;
break;
case 0xe0f4: /* α⌠ */
pccode = 0xeaa2;
break;
case 0xfa5b: /* ·[ */
pccode = 0x81e6;
break;
case 0xfa54: /* ·T */
pccode = 0x81ca;
break;
case 0x8d56: /* ìV */
pccode = 0xfad0;
break;
case 0xfad0: /* ·╨ */
pccode = 0x8d56;
break;
} /* endswitch */
return (pccode);
}
wchar_t _Export
NewJisToOldJis(
wchar_t pccode) {
switch (pccode) {
case 0xe9cb: /* Θ╦ */
pccode = 0x88b1;
break;
case 0x88b1: /* ê▒ */
pccode = 0xe9cb;
break;
case 0xe9f2: /* Θ≥ */
pccode = 0x89a7;
break;
case 0x89a7: /* ëº */
pccode = 0xe9f2;
break;
case 0xe579: /* σy */
pccode = 0x8a61;
break;
case 0x8a61: /* èa */
pccode = 0xe579;
break;
case 0x9d98: /* ¥ÿ */
pccode = 0x8a68;
break;
case 0x8a68: /* èh */
pccode = 0x9d98;
break;
case 0xe27d: /* Γ} */
pccode = 0x8a96;
break;
case 0x8a96: /* èû */
pccode = 0xe27d;
break;
case 0x9ff3: /* IJ */
pccode = 0x8ac1;
break;
case 0x8ac1: /* è┴ */
pccode = 0x9ff3;
break;
case 0xe67c: /* µ| */
pccode = 0x8ad0;
break;
case 0x8ad0: /* è╨ */
pccode = 0xe67c;
break;
case 0xe8f2: /* Φ≥ */
pccode = 0x8c7a;
break;
case 0x8c7a: /* îz */
pccode = 0xe8f2;
break;
case 0xe1e6: /* ßµ */
pccode = 0x8d7b;
break;
case 0x8d7b: /* ì{ */
pccode = 0xe1e6;
break;
case 0xe541: /* σA */
pccode = 0x8ec7;
break;
case 0x8ec7: /* Ä╟ */
pccode = 0xe541;
break;
case 0xe8d5: /* Φ╒ */
pccode = 0x9078;
break;
case 0x9078: /* Éx */
pccode = 0xe8d5;
break;
case 0xe6cb: /* µ╦ */
pccode = 0x9147;
break;
case 0x9147: /* æG */
pccode = 0xe6cb;
break;
case 0x9ae2: /* ÜΓ */
pccode = 0x92d9;
break;
case 0x92d9: /* Æ┘ */
pccode = 0x9ae2;
break;
case 0xe1e8: /* ßΦ */
pccode = 0x9376;
break;
case 0x9376: /* ôv */
pccode = 0xe1e8;
break;
case 0x9e8d: /* ₧ì */
pccode = 0x938e;
break;
case 0x938e: /* ôÄ */
pccode = 0x9e8d;
break;
case 0x9fb7: /* ƒ╖ */
pccode = 0x9393;
break;
case 0x9393: /* ôô */
pccode = 0x9fb7;
break;
case 0xe78e: /* τÄ */
pccode = 0x93f4;
break;
case 0x93f4: /* ô⌠ */
pccode = 0xe78e;
break;
case 0xe5a2: /* σó */
pccode = 0x9488;
break;
case 0x9488: /* öê */
pccode = 0xe5a2;
break;
case 0x9e77: /* ₧w */
pccode = 0x954f;
break;
case 0x954f: /* òO */
pccode = 0x9e77;
break;
case 0x98d4: /* ÿ╘ */
pccode = 0x9699;
break;
case 0x9699: /* ûÖ */
pccode = 0x98d4;
break;
case 0xe54d: /* σM */
pccode = 0x96f7;
break;
case 0x96f7: /* û≈ */
pccode = 0xe54d;
break;
case 0xe2c4: /* Γ─ */
pccode = 0x9855;
break;
case 0x9855: /* ÿU */
pccode = 0xe2c4;
break;
case 0xea9f: /* Ωƒ */
pccode = 0x8bc4;
break;
case 0x8bc4: /* ï─ */
pccode = 0xea9f;
break;
case 0xeaa0: /* Ωá */
pccode = 0x968a;
break;
case 0x968a: /* ûè */
pccode = 0xeaa0;
break;
case 0xeaa1: /* Ωí */
pccode = 0x9779;
break;
case 0x9779: /* ùy */
pccode = 0xeaa1;
break;
case 0xeaa2: /* Ωó */
pccode = 0xe0f4;
break;
case 0xe0f4: /* α⌠ */
pccode = 0xeaa2;
break;
case 0xfa5b: /* ·[ */
pccode = 0x81e6;
break;
case 0xfa54: /* ·T */
pccode = 0x81ca;
break;
case 0x8d56: /* ìV */
pccode = 0xfad0;
break;
case 0xfad0: /* ·╨ */
pccode = 0x8d56;
break;
case 0xe086: /* αå */
pccode = FillInPc;
break;
case 0xeaa3: /* Ωú */
pccode = FillInPc;
break;
} /* endswitch */
return (pccode);
}
int _Export
IbmcodeStringToJiscodeString(
PCHAR ibmstr,
int ibmstrsize,
PCHAR jisstr,
int jisstrsize) {
RxJisArgCheck(jisstr, ibmstr, ibmstrsize, jisstrsize)
int i = 0;
int j = 0;
while (i < ibmstrsize) {
if (!IsDbcs1st(ibmstr[i])) {
RxJisCountCheck(j + 1, jisstrsize)
jisstr[j++] = ibmstr[i++];
continue;
} /* endif */
if (i + 1 >= ibmstrsize) {
break;
} /* endif */
int h = ibmstr[i++];
int l = ibmstr[i++];
if (!InJis90) {
wchar_t c = h << ByteBitWidth | l;
c = OldJisToNewJis(c);
l = c & ByteMask;
h = c >> ByteBitWidth;
} /* endif */
if (!IbmToJisTable[h] || !IbmToJisTable[h][l]) {
RxJisCountCheck(j + 2, jisstrsize)
jisstr[j++] = h;
jisstr[j++] = l;
continue;
} /* endif */
PCHAR s = IbmToJisTable[h][l];
int z = strlen(s);
RxJisCountCheck(j + z, jisstrsize)
while (*s) {
jisstr[j++] = *s++;
} /* endwhile */
} /* endwhile */
jisstr[j] = '\0';
return (j);
}
wchar_t _Export
PccodeToJiscode(
wchar_t pccode) {
char b[2];
wctomb(b, pccode);
if (!PcCodeToJisCodeTable[b[0]]) {
return (FillInJis);
} /* endif */
return (PcCodeToJisCodeTable[b[0]][b[1]]);
}