⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eucjpcodingsystem.cxx

📁 SP是一个基于GNU C++编译器
💻 CXX
字号:
// Copyright (c) 1994 James Clark// See the file COPYING for copying permission.#include "splib.h"#ifdef SP_MULTI_BYTE#include "EUCJPCodingSystem.h"#ifdef SP_NAMESPACEnamespace SP_NAMESPACE {#endifclass EUCJPDecoder : public Decoder {public:  EUCJPDecoder() { }  size_t decode(Char *, const char *, size_t, const char **);private:};class EUCJPEncoder : public Encoder {public:  EUCJPEncoder() { }  void output(const Char *, size_t, OutputByteStream *);};Decoder *EUCJPCodingSystem::makeDecoder() const{  return new EUCJPDecoder;}Encoder *EUCJPCodingSystem::makeEncoder() const{  return new EUCJPEncoder;}size_t EUCJPDecoder::decode(Char *to, const char *s,			    size_t slen, const char **rest){  Char *start = to;  const unsigned char *us = (const unsigned char *)s;  while (slen > 0) {    if (!(*us & 0x80)) {      // G0      *to++ = *us++;      slen--;    }    else if (*us == 0x8e) {      // G2      if (slen < 2)	break;      slen -= 2;      ++us;      *to++ = *us++ | 0x80;    }    else if (*us == 0x8f) {      // G3      if (slen < 3)	break;      slen -= 3;      ++us;      unsigned short n = (*us++ | 0x80) << 8;      n |= (*us++ & ~0x80);      *to++ = n;    }    else {      // G1      if (slen < 2)	break;      slen -= 2;      unsigned short n = *us++ << 8;      n |= (*us++ | 0x80);      *to++ = n;    }  }  *rest = (const char *)us;  return to - start;}void EUCJPEncoder::output(const Char *s, size_t n, OutputByteStream *sb){  for (; n > 0; s++, n--) {    Char c = *s;    unsigned short mask = (unsigned short)(c & 0x8080);    if (mask == 0)      sb->sputc((unsigned char)(c & 0xff));    else if (mask == 0x8080) {      sb->sputc((unsigned char)((c >> 8) & 0xff));      sb->sputc((unsigned char)(c & 0xff));    }    else if (mask == 0x0080) {      sb->sputc((unsigned char)0x8e);      sb->sputc((unsigned char)(c & 0xff));    }    else {      // mask == 0x8000      sb->sputc((unsigned char)0x8f);      sb->sputc((unsigned char)((c >> 8) & 0xff));      sb->sputc((unsigned char)(c & 0x7f));    }  }}#ifdef SP_NAMESPACE}#endif#else /* not SP_MULTI_BYTE */#ifndef __GNUG__static char non_empty_translation_unit;	// sigh#endif#endif /* not SP_MULTI_BYTE */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -