'a'..'z': Kwartet[i] := 26+ Kwartet[i]
- Ord('a') + Ord(SP);
'0'..'9': Kwartet[i] := 52+ Kwartet[i]
- Ord('0') + Ord(SP);
'+': Kwartet[i] := 62+ Ord(SP);
'/': Kwartet[i] := 63+ Ord(SP);
end
end
end
else
if XXCode then
begin
for i:=0 to 3 do
begin
case Chr(Kwartet[i]) of
'+': Kwartet[i] := 0 + Ord(SP);
'-': Kwartet[i] := 1 + Ord(SP);
'0'..'9': Kwartet[i] := 2 + Kwartet[i]
- Ord('0') + Ord(SP);
'A'..'Z': Kwartet[i] := 12 + Kwartet[i]
- Ord('A') + Ord(SP);
'a'..'z': Kwartet[i] := 38 + Kwartet[i]
- Ord('a') + Ord(SP)
end
end
end;
Triplet[0] := ((Kwartet[0] - Ord(SP)) SHL 2) +
(((Kwartet[1] - Ord(SP)) AND $30) SHR 4);
Triplet[1] := (((Kwartet[1] - Ord(SP)) AND $0F) SHL 4) +
(((Kwartet[2] - Ord(SP)) AND $3C) SHR 2);
Triplet[2] := (((Kwartet[2] - Ord(SP)) AND $03) SHL 6) +
((Kwartet[3] - Ord(SP)) AND $3F)
end{Kwartet2Triplet};
Заметим, что в новой версии появилась новая глобальная переменная, которая используется для определения формата кодирования.
MIME означает Multipurpose Internet Mail Extensions (Расширение форматов Интернет почты), в котором международным стандартом является кодирование Base64. Данное расширение было разработано для многоязычной поддержки и преобразования символов между системами (такими как IBM мейнфреймы, системы на базе UNIX, Macintosh и IBM PC).
MIME алгоритм кодирования базируется на RFC1341 как MIME Base64. Подобно UUencode, назначение MIME кодировать двоичные файлы так, что бы они смогли пройти через различные почтовые системы, и MIME использует для этого алгоритм кодирования Base64, плюс набор специальных ключевых слов и опций, которые используются для более детализированной информации о содержимом MIME.
1.1.5. TBUUCode компонент
Определение интерфейса компонента TUUCode, базируется на ранее приведенных и объясненных процедур Triplet2Kwartet и Kwartet2Triplet, заметим, что ниже приведенный код использует условное компилирование в зависимости от версий Delphi и C++Builder.
unitUUCode;
interface
uses
{$IFDEF WIN32}
Windows,
{$ELSE}
WinTypes, WinProcs,
{$ENDIF}
SysUtils, Messages, Classes, Graphics, Controls, Forms;
{$IFNDEF WIN32}
type
ShortString = String;
{$ENDIF}
type
EUUCode = class(Exception);
TAlgorithm = (filecopy, uuencode, uudecode, xxencode, xxdecode, Base64encode, Base64decode);
TUnixCRLF = (CRLF, LF);
TProgressEvent = procedure(Percent:Word) of Object;
TBUUCode = class(TComponent)
public
{ Public class declarations (override) }
constructorCreate(AOwner: TComponent); override;
private
{ Private field declarations }
FAbout: ShortString;
FActive: Boolean;
FAlgorithm: TAlgorithm;
FFileMode: Word;
FHeaders: Boolean;
FInputFileName: TFileName;
FOutputFileName: TFileName;
FOnProgress: TProgressEvent;
FUnixCRLF: TUnixCRLF;
{ Dummy method to get read-only About property }
procedureDummy(Ignore: ShortString);
protected
{ Protected Activate method }
procedureActivate(GoActive: Boolean);
public
{ Public UUCode interface declaration }
procedureUUCode;
published
{ Published design declarations }
propertyAbout: ShortString readFAbout writeDummy;
propertyActive: Boolean readFActive writeActivate;
propertyAlgorithm: TAlgorithm readFalgorithm writeFAlgorithm;
propertyFileMode: Word readFFileMode writeFFileMode;
propertyHeaders: Boolean readFHeaders writeFHeaders;
propertyInputFile: TFileName readFInputFileName writeFInputFileName;
propertyOutputFile: TFileName readFOutputFileName writeFOutputFileName;
propertyUnixCRLF: TUnixCRLF readFUnixCRLF writeFUnixCRLF;
published
{ Published Event property }
propertyOnProgress: TProgressEvent readFOnProgress writeFOnProgress;
end{TUUCode};
TUUCode компонент имеет восемь опубликованных свойств (мы здесь опустим описание обработчиков событий):
Свойство Aboutсодержит информацию о правах и версии.
Свойство Activeможет использоваться для вызова преобразования UUCode во время разработки (design time), подобно свойству Active у TTables и Tquery компонент.
Свойство Algorithmсодержит информацию об алгоритме кодирования для метода UUCode. Реализованы следующие алгоритмы:
· filecopy – простое копирование файла InputFile в файл OutputFile
Читать дальше