mirror of
https://github.com/Open-Cascade-SAS/OCCT.git
synced 2026-05-15 13:48:57 +08:00
225 lines
3.8 KiB
C
Executable File
225 lines
3.8 KiB
C
Executable File
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <sys/types.h>
|
|
|
|
typedef unsigned short char16 ;
|
|
|
|
#include <Resource_Shiftjis.h>
|
|
#include <Resource_gb2312.h>
|
|
|
|
#define isjis(c) (((c)>=0x21 && (c)<=0x7e))
|
|
#define iseuc(c) (((c)>=0xa1 && (c)<=0xfe))
|
|
#define issjis1(c) (((c)>=0x81 && (c)<=0x9f) || ((c)>=0xe0 && (c)<=0xef))
|
|
#define issjis2(c) ((c)>=0x40 && (c)<=0xfc && (c)!=0x7f)
|
|
#define ishankana(c) ((c)>=0xa0 && (c)<=0xdf)
|
|
#define isshift(c) (((c)>=0x80 && (c)<=0xff))
|
|
|
|
|
|
static void sjis_to_jis (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
|
|
if ( ! issjis1 ( *ph ) || ! issjis2 ( *pl ) ) {
|
|
return ;
|
|
}
|
|
|
|
if (*ph <= 0x9f)
|
|
{
|
|
if (*pl < 0x9f)
|
|
*ph = (*ph << 1) - 0xe1;
|
|
else
|
|
*ph = (*ph << 1) - 0xe0;
|
|
}
|
|
else
|
|
{
|
|
if (*pl < 0x9f)
|
|
*ph = (*ph << 1) - 0x161;
|
|
else
|
|
*ph = (*ph << 1) - 0x160;
|
|
}
|
|
if (*pl < 0x7f)
|
|
*pl -= 0x1f;
|
|
else if (*pl < 0x9f)
|
|
*pl -= 0x20;
|
|
else
|
|
*pl -= 0x7e;
|
|
}
|
|
|
|
static void jis_to_sjis (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
if (*ph & 1)
|
|
{
|
|
if (*pl < 0x60)
|
|
*pl += 0x1f;
|
|
else
|
|
*pl += 0x20;
|
|
}
|
|
else
|
|
*pl += 0x7e;
|
|
if (*ph < 0x5f)
|
|
*ph = (*ph + 0xe1) >> 1;
|
|
else
|
|
*ph = (*ph + 0x161) >> 1;
|
|
}
|
|
|
|
static void euc_to_sjis (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
if ( (*ph & 0xFFFFFF00) || (*pl & 0xFFFFFF00) ) {
|
|
*ph = 0 ;
|
|
*pl = 0 ;
|
|
return ;
|
|
}
|
|
|
|
if ( ! iseuc ( *ph ) || ! iseuc ( *pl ) ) {
|
|
return ;
|
|
}
|
|
|
|
|
|
*ph &= 0x7F ;
|
|
*pl &= 0x7F ;
|
|
|
|
jis_to_sjis ( ph , pl ) ;
|
|
|
|
}
|
|
|
|
static void sjis_to_euc (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
if ( (*ph & 0xFFFFFF00) || (*pl & 0xFFFFFF00) ) {
|
|
*ph = 0 ;
|
|
*pl = 0 ;
|
|
return ;
|
|
}
|
|
|
|
if ( ! issjis1 ( *ph ) || ! issjis2 ( *pl ) ) {
|
|
return ;
|
|
}
|
|
|
|
if ( *ph == 0 && *pl == 0 )
|
|
return ;
|
|
|
|
sjis_to_jis ( ph , pl ) ;
|
|
|
|
*ph |= 0x80 ;
|
|
*pl |= 0x80 ;
|
|
|
|
}
|
|
|
|
void Resource_sjis_to_unicode (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
char16 sjis ;
|
|
char16 uni ;
|
|
|
|
if ( (*ph & 0xFFFFFF00) || (*pl & 0xFFFFFF00) ) {
|
|
*ph = 0 ;
|
|
*pl = 0 ;
|
|
return ;
|
|
}
|
|
|
|
if ( ! issjis1 ( *ph ) || ! issjis2 ( *pl ) ) {
|
|
return ;
|
|
}
|
|
|
|
sjis = ((*ph) << 8) | (*pl) ;
|
|
uni = sjisuni [sjis] ;
|
|
*ph = uni >> 8 ;
|
|
*pl = uni & 0xFF ;
|
|
}
|
|
|
|
void Resource_unicode_to_sjis (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
char16 sjis ;
|
|
char16 uni ;
|
|
|
|
if ( (*ph & 0xFFFFFF00) || (*pl & 0xFFFFFF00) ) {
|
|
*ph = 0 ;
|
|
*pl = 0 ;
|
|
return ;
|
|
}
|
|
if ( *ph == 0 && *pl == 0 )
|
|
return ;
|
|
|
|
uni = ((*ph) << 8) | (*pl) ;
|
|
sjis = unisjis [uni] ;
|
|
*ph = sjis >> 8 ;
|
|
*pl = sjis & 0xFF ;
|
|
}
|
|
|
|
void Resource_unicode_to_euc (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
|
|
if ( *ph == 0 && *pl == 0 )
|
|
return ;
|
|
|
|
Resource_unicode_to_sjis ( ph , pl ) ;
|
|
if (issjis1(*ph)) { /* let's believe it is ANSI code if it is not sjis*/
|
|
sjis_to_euc ( ph , pl ) ;
|
|
}
|
|
|
|
}
|
|
|
|
void Resource_euc_to_unicode (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
|
|
if ( ! iseuc ( *ph ) || ! iseuc ( *pl ) ) {
|
|
return ;
|
|
}
|
|
|
|
|
|
if ( *ph == 0 && *pl == 0 )
|
|
return ;
|
|
|
|
euc_to_sjis ( ph , pl ) ;
|
|
Resource_sjis_to_unicode ( ph , pl ) ;
|
|
|
|
}
|
|
|
|
|
|
void Resource_gb_to_unicode (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
char16 gb ;
|
|
char16 uni ;
|
|
|
|
|
|
if ( (*ph & 0xFFFFFF00) || (*pl & 0xFFFFFF00) ) {
|
|
*ph = 0 ;
|
|
*pl = 0 ;
|
|
return ;
|
|
}
|
|
|
|
if ( ! isshift ( *ph ) || ! isshift ( *pl ) ) {
|
|
return ;
|
|
}
|
|
|
|
*ph = (*ph) & 0x7f ;
|
|
*pl = (*pl) & 0x7f ;
|
|
|
|
gb = ((*ph) << 8) | (*pl) ;
|
|
uni = gbuni [gb] ;
|
|
*ph = uni >> 8 ;
|
|
*pl = uni & 0xFF ;
|
|
}
|
|
|
|
void Resource_unicode_to_gb (unsigned int *ph, unsigned int *pl)
|
|
{
|
|
char16 gb ;
|
|
char16 uni ;
|
|
|
|
if ( (*ph & 0xFFFFFF00) || (*pl & 0xFFFFFF00) ) {
|
|
*ph = 0 ;
|
|
*pl = 0 ;
|
|
return ;
|
|
}
|
|
if ( *ph == 0 && *pl == 0 )
|
|
return ;
|
|
|
|
uni = ((*ph) << 8) | (*pl) ;
|
|
gb = unigb [uni] ;
|
|
if (gb != 0) {
|
|
*ph = ( gb >> 8 ) | 0x80 ;
|
|
*pl = ( gb & 0xFF ) | 0x80 ;
|
|
}
|
|
else {
|
|
*ph = 0;
|
|
*pl = 0 ;
|
|
}
|
|
}
|