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

📄 decoderbase.h

📁 此文件为RTF文件转换为TXT文件的解码程序。
💻 H
字号:
#include "assert.h"
#include "cbits.h"

/********************************************
译码器基类  V1.00
Copyright(c) 网络信息一体化控守系统研制组

该基类的任何修改必须经过小组的统一协商.

!!!所有用户派生的译码器工程必须将所有需要的文件放入同一目录,
!!!最好使用译码器名称作为目录名,此目录下不要包含无关文件,测试工程
!!!应该建立专门的工作目录和测试派生类,不得在原类的基础上增加用于
!!!测试的成员

创建日期:2003.6.4
修改历史:
	2003.06.12  增加CSortNameList模版类,支持对关键词的查找


*********************************************/

typedef unsigned char  u_char;

//
//----------字符集基类---------------------------------
//
class  CODEC
{
public:
	enum
	{
		NONE=0,  //非编码字符
		ESC=3,  //内部转义字符
		BLANK='?'

	};
	char  *codecName;
	int	  codePage;
	unsigned short *tbl;  //size [65536];
public:
	CODEC() {tbl=NULL;};
	virtual ~CODEC() {};
	virtual unsigned short translate(u_char *pch,int &size)=0;
};

//
//------公用资源类,可扩充----------------------
//
/*
该资源类用于提供获取多个译码类共用资源,如代码表等

*/
//
//--------------------------------
//

class  CPublicResource
{
public:
	CODEC* FindCodec(int cp);
	CODEC* FindCodec(const char *name);
	CODEC* TestCodec(const char *,int len); //检测指定字符串的字符集
	int ver;
public:
	 CPublicResource();
	~CPublicResource();
	void  writelog(char *msg,...);  //输出日志信息,格式同printf
	
	void  fatal(char *str)         //严重错误时调用
	{
		assert(0);
	}

};

//
//--------------------------------------------
//

class  CDecoderBase
{
public:
	char *coderName;	//译码器名称
	int	 version;		//译码器版本  0x0101  为1.1
	int  type;			//译码器工作结果类型 
	CPublicResource  *pub;
public:
	enum  
	{
		UNKNOWN_TYPE,
		IS_UNICODE,
		IS_ASCII,
		IS_IMAGE,
		IS_BINARY,
		IS_FAX
	};


public:
	CDecoderBase(CPublicResource *ps)
	{
		pub=ps;
	}

	virtual ~CDecoderBase()
	{

	}

	virtual  bool reset()	//所有译码器对象应可重用,调用reset复位
	{
		return true;
	}


	virtual  int   is_me(u_char *buf,int len)  //测试是否为当前类型的文档
											   //返回百分比表示的可能性 0表示不是,100表示肯定是
	{
		return 100;
	}

	virtual bool decode(u_char *inbuf,int insize,	//输入缓冲区
				u_char *outbuf,int outbufsize  //输出缓冲区,推荐使用
				)		//只要不出现内部错误,应返回真
	{
		return true;
	}

	virtual u_char* get_result(int &retsize,int& ret_type) //返回结果缓冲区,可以不是给定的缓冲区
	{
		return NULL;
	};  

	virtual bool continue_decode()	//如果还能继续解码,可反复调用get_result获取结果
	{
		//当无可继续译码的数据,实现类应负责清除临时缓冲区
		return false;
	}

};

//
//-------译码器基类定义结束---------------------------------------
//


⌨️ 快捷键说明

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