File: cptran.h

package info (click to toggle)
wp2latex 3.97%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 5,228 kB
  • sloc: cpp: 45,091; ansic: 8,998; asm: 2,435; makefile: 529; sh: 19
file content (82 lines) | stat: -rw-r--r-- 2,187 bytes parent folder | download
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