unit GB2BIG;interfaceuses Windows, Messages, SysUtils, Classes;const GBfirst = $A1A1; // first code of GB */ GBlast = $FEFE; //last code of GB */ GBsize = $5E5E; // GBlast - GBfirst + 1 */ type TGB2BIG = class(TComponent) private { Private declarations } Instance: THandle; GBTAB, DupCode, DupData: TResourceStream; protected { Protected declarations } public { Public declarations } function GBtoBIG5(S: string): string; function GetBIGS(S: string): string; constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published declarations } end;procedure Register;implementation {$R GB2BIG32.res}procedure Register; begin RegisterComponents('代刚', [TGB2BIG]); end; constructor TGB2BIG.Create(AOwner: TComponent); begin inherited Create(AOwner); if Not(csDesigning in ComponentState) then begin GBTAB := TResourceStream.Create(Instance, 'GB2BIG', RT_RCDATA); DupCode := TResourceStream.Create(Instance, 'DUPCODE', RT_RCDATA); DupData := TResourceStream.Create(Instance, 'DUPDATA', RT_RCDATA); end; end;destructor TGB2BIG.Destroy; begin GBTAB.free; DupCode.free; DupData.free; inherited Destroy; end;function TGB2BIG.GetBIGS(S: string): string; var C : array[0..5] of Char; W : PWordArray; CA : array[0..2] of Char; I : Integer; bak: string; begin bak := ''; if Byte(S[1]) > $A0 then begin W := @(C[0]); C[2] := S[1]; C[3] := S[2]; C[5] := S[1]; C[4] := S[2]; W[2] := W[2] - GBfirst; GBTAB.Position := W[2] * 2; GBTAB.read (CA, 2); CA[2] := #0; bak := bak + StrPas(CA); I := 0; while I < DupCode.Size do begin DupCode.Position := I; DupCode.read (C, 2); if W[0] = W[1] then begin DupData.Position := I; DupData.read (CA, 2); CA[2] := #0; bak := bak + CA; end; inc(I, 2); end; end; Result := bak; end;function TGB2BIG.GBtoBIG5(S: string): string; var bak: string; C : array[0..1] of Byte; I : Integer; W : PWordArray; CA : array[0..2] of Char; begin bak := ''; W := @(C[0]); I := 1; while I <= Length(S) do begin C[1] := Byte(S[I]); if C[1] > $A0 then begin inc(I, 1); C[0] := Byte(S[I]); inc(I, 1); W[0] := W[0] - GBfirst; GBTAB.Position := W[0] * 2; GBTAB.read (CA, 2); CA[2] := #0; bak := bak + StrPas(CA); end else begin bak := bak + S[I]; inc(I, 1); end; end; Result := bak; end;end. unit BIG2GB;interfaceuses Windows, Classes, Messages, SysUtils; const
BIGfirst = $A140; // first code of BIG BIGlast = $F9FE; // last code of BIG BIGsize = $58BF; // BIGlast - BIGfirst + 1
type TBIG2GB = class(TComponent) private { Private declarations } Instance : THandle; BIGTAB : TResourceStream; protected { Protected declarations } public { Public declarations } function BIG5toGB(S: string): string; constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published declarations } end;
procedure register; implementation {$R BIG2GB32.res} constructor TBIG2GB.Create(AOwner: TComponent); begin inherited Create(AOwner); if Not(csDesigning in ComponentState) then begin BIGTAB := TResourceStream.Create(Instance, 'BIG2GB', RT_RCDATA);
end; end;destructor TBIG2GB.Destroy; begin BIGTAB.free; inherited Destroy; end; function TBIG2GB.BIG5toGB(S: string): string; var bak : string; C : array[0..1] of Byte; I : Integer; W : PWordArray; CA : array[0..2] of Char; begin bak := ''; I := 1; w:=@(C[0]); while I <= Length(S) do begin C[1] := Byte(S[I]); if C[1] > $A0 then begin inc(I, 1); C[0] := byte(S[I]); inc(I, 1); W[0] := W[0] - BIGfirst; BigTAB.Position:= W[0]*2; BIGTAB.Read(CA,2); CA[2]:=#0; bak := bak + StrPas(CA); end else begin bak := bak + S[I]; inc(I, 1); end; end; Result := bak; end;procedure register; begin RegisterComponents('代刚',[TBIG2GB]); end;end.
Windows, Messages, SysUtils, Classes;const
GBfirst = $A1A1; // first code of GB */
GBlast = $FEFE; //last code of GB */
GBsize = $5E5E; // GBlast - GBfirst + 1 */
type
TGB2BIG = class(TComponent)
private
{ Private declarations }
Instance: THandle;
GBTAB, DupCode, DupData: TResourceStream;
protected
{ Protected declarations }
public
{ Public declarations }
function GBtoBIG5(S: string): string;
function GetBIGS(S: string): string;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
end;procedure Register;implementation
{$R GB2BIG32.res}procedure Register;
begin
RegisterComponents('代刚', [TGB2BIG]);
end;
constructor TGB2BIG.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if Not(csDesigning in ComponentState) then
begin
GBTAB := TResourceStream.Create(Instance, 'GB2BIG', RT_RCDATA);
DupCode := TResourceStream.Create(Instance, 'DUPCODE', RT_RCDATA);
DupData := TResourceStream.Create(Instance, 'DUPDATA', RT_RCDATA);
end;
end;destructor TGB2BIG.Destroy;
begin
GBTAB.free;
DupCode.free;
DupData.free;
inherited Destroy;
end;function TGB2BIG.GetBIGS(S: string): string;
var
C : array[0..5] of Char;
W : PWordArray;
CA : array[0..2] of Char;
I : Integer;
bak: string;
begin
bak := '';
if Byte(S[1]) > $A0 then
begin
W := @(C[0]);
C[2] := S[1];
C[3] := S[2];
C[5] := S[1];
C[4] := S[2];
W[2] := W[2] - GBfirst;
GBTAB.Position := W[2] * 2;
GBTAB.read (CA, 2);
CA[2] := #0;
bak := bak + StrPas(CA);
I := 0;
while I < DupCode.Size do
begin
DupCode.Position := I;
DupCode.read (C, 2);
if W[0] = W[1] then
begin
DupData.Position := I;
DupData.read (CA, 2);
CA[2] := #0;
bak := bak + CA;
end;
inc(I, 2);
end;
end;
Result := bak;
end;function TGB2BIG.GBtoBIG5(S: string): string;
var
bak: string;
C : array[0..1] of Byte;
I : Integer;
W : PWordArray;
CA : array[0..2] of Char;
begin
bak := '';
W := @(C[0]);
I := 1;
while I <= Length(S) do
begin
C[1] := Byte(S[I]);
if C[1] > $A0 then
begin
inc(I, 1);
C[0] := Byte(S[I]);
inc(I, 1);
W[0] := W[0] - GBfirst;
GBTAB.Position := W[0] * 2;
GBTAB.read (CA, 2);
CA[2] := #0;
bak := bak + StrPas(CA);
end
else
begin
bak := bak + S[I];
inc(I, 1);
end;
end;
Result := bak;
end;end.
unit BIG2GB;interfaceuses
Windows, Classes, Messages, SysUtils;
const
BIGfirst = $A140; // first code of BIG
BIGlast = $F9FE; // last code of BIG
BIGsize = $58BF; // BIGlast - BIGfirst + 1
type
TBIG2GB = class(TComponent)
private
{ Private declarations }
Instance : THandle;
BIGTAB : TResourceStream;
protected
{ Protected declarations }
public
{ Public declarations }
function BIG5toGB(S: string): string;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
end;
procedure register;
implementation
{$R BIG2GB32.res}
constructor TBIG2GB.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if Not(csDesigning in ComponentState) then
begin
BIGTAB := TResourceStream.Create(Instance, 'BIG2GB', RT_RCDATA);
end;
end;destructor TBIG2GB.Destroy;
begin
BIGTAB.free;
inherited Destroy;
end;
function TBIG2GB.BIG5toGB(S: string): string;
var
bak : string;
C : array[0..1] of Byte;
I : Integer;
W : PWordArray;
CA : array[0..2] of Char;
begin
bak := '';
I := 1;
w:=@(C[0]);
while I <= Length(S) do
begin
C[1] := Byte(S[I]);
if C[1] > $A0 then
begin
inc(I, 1);
C[0] := byte(S[I]);
inc(I, 1);
W[0] := W[0] - BIGfirst;
BigTAB.Position:= W[0]*2;
BIGTAB.Read(CA,2);
CA[2]:=#0;
bak := bak + StrPas(CA);
end
else
begin
bak := bak + S[I];
inc(I, 1);
end;
end;
Result := bak;
end;procedure register;
begin
RegisterComponents('代刚',[TBIG2GB]);
end;end.