1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
#ifndef __CP_Tran_h
#define __CP_Tran_h
#include "common.h"
#ifndef WORD
#include "typedfs.h"
#endif
/// Parent codepage translator that maintains list of translators.
class CpTranslator
{
private:static CpTranslator *First;
CpTranslator *Previous;
CpTranslator *Next;
public: explicit CpTranslator(const char *name);
~CpTranslator();
const char *Name;
virtual WORD operator[](const WORD n) const {return(n);}
virtual WORD number(void) const {return(0);}
static CpTranslator *getFirst(void) {return(First);};
CpTranslator *getNext(void) {return(Next);};
friend CpTranslator *GetTranslator(const char *Name);
};
CpTranslator *GetTranslator(const char *Name);
/// Codepage translator that converts to wchar.
class WCpTranslator: public CpTranslator
{
public: WCpTranslator(const char *name, WORD number, const WORD *trn);
WORD Number;
const WORD *Trn;
virtual WORD operator[](const WORD n) const {if(n>=Number) return(n); return(Trn[n]);}
WORD number(void) const {return(Number);}
};
/// Codepage translator that converts to 8bit char.
class BCpTranslator: public CpTranslator
{
public: BCpTranslator(const char *name, WORD number, const BYTE *trn);
WORD Number;
const BYTE *Trn;
virtual WORD operator[](const WORD n) const {if(n>=Number) return(n); return(Trn[n]);}
WORD number(void) const {return(Number);}
};
/// Codepage translator that converts to wchar where the space is not contiguous.
class WSparseCpTranslator: public CpTranslator
{
public: WSparseCpTranslator(const char *name, BYTE banks, const WORD *const *trn_bank);
BYTE Banks;
const WORD * const* Trn_bank;
virtual WORD operator[](const WORD n) const;
WORD number(void) const {return(256*Banks);}
};
/// Codepage translator that converts to wchar where the space is not contiguous.
class BSparseCpTranslator: public CpTranslator
{
public: BSparseCpTranslator(const char *name, BYTE banks, const BYTE *const *trn_bank);
BYTE Banks;
const BYTE * const* Trn_bank;
virtual WORD operator[](const WORD n) const;
WORD number(void) const {return(256*Banks);}
};
#endif
|