Subversion Repositories decoder

Compare Revisions

No changes between revisions

Regard whitespace Rev 1 → Rev 2

/trunk/Quelltext/About.dfm
0,0 → 1,145
object AboutForm: TAboutForm
Left = 0
Top = 0
BorderIcons = [biSystemMenu]
BorderStyle = bsSingle
Caption = '#'
ClientHeight = 232
ClientWidth = 361
Color = clWindow
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
OnCreate = form_create
PixelsPerInch = 96
TextHeight = 13
object spe_leftshape: TShape
Left = 0
Top = 0
Width = 105
Height = 233
Brush.Color = clBtnFace
Pen.Style = psClear
end
object img_schloss: TImage
Left = 8
Top = 8
Width = 89
Height = 89
AutoSize = True
Transparent = True
end
object lbl_name: TLabel
Left = 112
Top = 8
Width = 9
Height = 13
Caption = '#'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
Transparent = True
end
object lbl_version: TLabel
Left = 112
Top = 24
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_leader: TLabel
Left = 112
Top = 40
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_copyright: TLabel
Left = 112
Top = 64
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_url: TLabel
Left = 112
Top = 80
Width = 7
Height = 13
Cursor = crHandPoint
Caption = '#'
Transparent = True
OnClick = lbl_urlClick
end
object gbx_lang: TGroupBox
Left = 112
Top = 104
Width = 241
Height = 89
Caption = '#'
TabOrder = 0
object lbl_lang_value: TLabel
Left = 64
Top = 24
Width = 7
Height = 13
Caption = '#'
end
object lbl_translator_value: TLabel
Left = 64
Top = 40
Width = 7
Height = 13
Caption = '#'
end
object lbl_revision_value: TLabel
Left = 64
Top = 56
Width = 7
Height = 13
Caption = '#'
end
object lbl_lang_name: TLabel
Left = 16
Top = 24
Width = 7
Height = 13
Caption = '#'
end
object lbl_translator_name: TLabel
Left = 16
Top = 40
Width = 7
Height = 13
Caption = '#'
end
object lbl_revision_name: TLabel
Left = 16
Top = 56
Width = 7
Height = 13
Caption = '#'
end
end
object btn_close: TButton
Left = 240
Top = 200
Width = 115
Height = 25
Cancel = True
Caption = '#'
Default = True
TabOrder = 1
OnClick = btn_closeClick
end
end
/trunk/Quelltext/About.pas
0,0 → 1,159
unit About;
 
interface
 
uses
Windows, Messages, SysUtils, Forms, StdCtrls, ExtCtrls, Inifiles, shellapi,
DCConst, Controls, Classes;
 
type
TAboutForm = class(TForm)
lbl_name: TLabel;
img_schloss: TImage;
lbl_version: TLabel;
lbl_leader: TLabel;
lbl_copyright: TLabel;
spe_leftshape: TShape;
gbx_lang: TGroupBox;
lbl_lang_value: TLabel;
lbl_translator_value: TLabel;
lbl_revision_value: TLabel;
btn_close: TButton;
lbl_url: TLabel;
lbl_lang_name: TLabel;
lbl_translator_name: TLabel;
lbl_revision_name: TLabel;
procedure form_create(Sender: TObject);
procedure btn_closeClick(Sender: TObject);
procedure lbl_urlClick(Sender: TObject);
private
LangArray, LangArraySig: array of TLanguageEntry;
function GetLangEntry(name: string): string;
function GetLangSig(name: string): string;
end;
 
var
AboutForm: TAboutForm;
 
implementation
 
{$R *.dfm}
 
function TAboutForm.GetLangEntry(name: string): string;
var
i: integer;
begin
for i := 0 to high(LangArray) do
begin
if LangArray[i].name = name then
begin
result := LangArray[i].text;
break;
end;
end;
end;
 
function TAboutForm.GetLangSig(name: string): string;
var
i: integer;
begin
for i := 0 to high(LangArraySig) do
begin
if LangArraySig[i].name = name then
begin
result := LangArraySig[i].text;
break;
end;
end;
end;
 
procedure TAboutForm.lbl_urlClick(Sender: TObject);
begin
shellexecute(application.Handle, 'open', 'http://www.viathinksoft.de/', '', '', sw_normal);
end;
 
procedure TAboutForm.btn_closeClick(Sender: TObject);
begin
close;
end;
 
procedure TAboutForm.form_create(Sender: TObject);
var
ini: TIniFile;
str: TStringList;
i: integer;
Y, M, D: Word;
begin
// Sprachdatei & Signatur auslesen
 
ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Language.ini');
str := TStringList.Create();
try
ini.ReadSection(Name, str);
for i := 0 to str.count-1 do
begin
setlength(LangArray, length(LangArray)+1);
LangArray[length(LangArray)-1].name := str.strings[i];
LangArray[length(LangArray)-1].text := ini.ReadString(Name, str.strings[i], '?');
LangArray[length(LangArray)-1].text := StringReplace(LangArray[length(LangArray)-1].text, '###', #13#10, [rfReplaceAll]);
end;
 
ini.ReadSection('Signature', str);
for i := 0 to str.count-1 do
begin
setlength(LangArraySig, length(LangArraySig)+1);
LangArraySig[length(LangArraySig)-1].name := str.strings[i];
LangArraySig[length(LangArraySig)-1].text := ini.ReadString('Signature', str.strings[i], '?');
LangArraySig[length(LangArraySig)-1].text := StringReplace(LangArraySig[length(LangArraySig)-1].text, '###', #13#10, [rfReplaceAll]);
end;
finally
ini.free;
str.Free;
end;
 
// Bilder
 
icon.LoadFromResourceID(hInstance, 104);
img_schloss.Picture.Bitmap.LoadFromResourceName(hInstance, 'SCHLOSS');
 
// Texte
 
Caption := GetLangEntry('about');
lbl_translator_value.Caption := GetLangSig('Translator');
lbl_lang_value.Caption := GetLangSig('Language');
lbl_revision_value.Caption := GetLangSig('Revision');
gbx_lang.Caption := GetLangEntry('installedlang');
lbl_leader.Caption := Format(GetLangEntry('leader'), ['Daniel Marschall']);
lbl_version.Caption := Format(GetLangEntry('version'), [DC4Ver]);
lbl_name.Caption := '(De)Coder';
lbl_url.Caption := 'www.viathinksoft.de';
DecodeDate(Now(), Y, M, D);
lbl_copyright.Caption := Format(GetLangEntry('copyright'), [2001, Y, 'ViaThinkSoft']);
lbl_lang_name.Caption := GetLangEntry('lang');
lbl_translator_name.Caption := GetLangEntry('translator');
lbl_revision_name.Caption := GetLangEntry('revision');
btn_close.Caption := GetLangEntry('ok');
 
// Horizontal
 
spe_leftshape.Width := img_schloss.Width + 16;
lbl_name.Left := spe_leftshape.Left + spe_leftshape.Width + 8;
lbl_url.left := lbl_name.left;
lbl_version.left := lbl_url.left;
lbl_leader.left := lbl_version.left;
lbl_copyright.left := lbl_leader.left;
gbx_lang.Left := lbl_copyright.left;
gbx_lang.Width := max_4(lbl_name.width, lbl_version.width, lbl_leader.width, lbl_copyright.width);
btn_close.Left := gbx_lang.left + gbx_lang.width - btn_close.width;
lbl_lang_value.Left := lbl_lang_name.left + max_3(lbl_lang_name.Width, lbl_translator_name.Width, lbl_revision_name.Width) + 8;
lbl_translator_value.left := lbl_translator_name.left + max_3(lbl_lang_name.Width, lbl_translator_name.Width, lbl_revision_name.Width) + 8;
lbl_revision_value.left := lbl_revision_name.left + max_3(lbl_lang_name.Width, lbl_translator_name.Width, lbl_revision_name.Width) + 8;
 
// Vertikal
 
spe_leftshape.Height := btn_close.Top + btn_close.Height + 8;
clientheight := spe_leftshape.top + spe_leftshape.Height;
clientwidth := btn_close.Left + btn_close.Width + 8;
end;
 
end.
/trunk/Quelltext/Activator.RES
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/Activator.bdsproj
0,0 → 1,175
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{14CD9141-D204-4E28-BFBF-98C371C80F2C}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">Activator.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">8</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">1</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">0</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">0</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">1</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">0</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="GenerateHpps">False</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">False</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription"></Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath"></Directories>
<Directories Name="Packages"></Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000000</Language>
<Language Name="RootDir"></Language>
</Language>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription"></VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
</Delphi.Personality>
</BorlandProject>
/trunk/Quelltext/Activator.cfg
0,0 → 1,38
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-LN"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST
/trunk/Quelltext/Activator.dpr
0,0 → 1,188
// Activator.exe wird für Windows Vista benötigt und aktiviert Konfigurationseinstellungen
// Diese Anwendung besitzt durch den Kompatibilitätsmodus volle Adminrechte
 
program Activator;
 
uses
SysUtils,
Windows,
IniFiles,
Classes,
Registry;
 
{$R Activator.res}
 
type
TLanguageEntry = record
name: string;
text: string;
end;
 
var
LangArray: array of TLanguageEntry;
ini: TIniFile;
str: TStringList;
i: integer;
 
const
Name: String = 'Activator';
DC4Ver: String = '4.1';
 
function GetLangEntry(name: string): string;
var
i: integer;
begin
for i := 0 to high(LangArray) do
begin
if LangArray[i].name = name then
begin
result := LangArray[i].text;
break;
end;
end;
end;
 
function DLLRegister(dll: string; doregister: boolean): boolean;
type
DllReg = function: HResult; stdcall;
var
hDll: THandle;
dr: DllReg;
begin
result := false;
hDll := LoadLibrary(PChar(dll));
if hDll <> 0 then
begin
if doregister then
@dr := GetProcAddress(hDll, 'DllRegisterServer')
else
@dr := GetProcAddress(hDll, 'DllUnregisterServer');
if assigned(dr) then
begin
dr;
result := true;
end;
end;
end;
 
function TypeRegistry(App, IconIndex, Extension, InternalName, Name: string): boolean;
var
reg: TRegistry;
c1, c2, c3, c4, l1, l2, l3, l4: boolean;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
 
l1 := false;
if Reg.OpenKey('\'+Extension, true) then
begin
Reg.WriteString('', InternalName);
l1 := reg.ReadString('') = InternalName;
Reg.CloseKey();
end;
c1 := reg.KeyExists('\'+Extension);
 
l2 := false;
if Reg.OpenKey('\'+InternalName, true) then
begin
Reg.WriteString('', Name);
l2 := reg.ReadString('') = Name;
Reg.CloseKey();
end;
c2 := reg.KeyExists('\'+InternalName);
 
l3 := false;
if Reg.OpenKey('\'+InternalName+'\DefaultIcon', true) then
begin
Reg.WriteString('', App+','+IconIndex);
l3 := reg.ReadString('') = App+','+IconIndex;
Reg.CloseKey();
end;
c3 := reg.KeyExists('\'+InternalName+'\DefaultIcon');
 
l4 := false;
if Reg.OpenKey('\'+InternalName+'\shell\open\command', true) then
begin
Reg.WriteString('', '"'+App+'" "%1"');
l4 := reg.ReadString('') = '"'+App+'" "%1"';
Reg.CloseKey();
end;
c4 := reg.KeyExists('\'+InternalName+'\shell\open\command');
finally
Reg.Free;
end;
 
result := c1 and c2 and c3 and c4 and l1 and l2 and l3 and l4;
end;
 
function TypeUnregistry(Extension: string): boolean;
var
reg: TRegistry;
temp: string;
c1, c2: boolean;
begin
c1 := false;
c2 := false;
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
 
if Reg.OpenKey('\'+Extension, false) then
begin
temp := Reg.ReadString('');
Reg.CloseKey();
if reg.KeyExists('\'+temp) then Reg.DeleteKey('\'+temp);
c1 := not reg.KeyExists('\'+temp);
if reg.KeyExists('\'+Extension) then Reg.DeleteKey('\'+Extension);
c2 := not reg.KeyExists('\'+Extension);
end;
finally
Reg.Free;
end;
 
result := c1 and c2;
end;
 
begin
// Sprachdatei auslesen
 
ini := TIniFile.Create(ExtractFilePath(paramstr(0))+'Language.ini');
str := TStringList.Create();
try
ini.ReadSection(Name, str);
for i := 0 to str.count-1 do
begin
setlength(LangArray, length(LangArray)+1);
LangArray[length(LangArray)-1].name := str.strings[i];
LangArray[length(LangArray)-1].text := ini.ReadString(name, str.strings[i], '');
LangArray[length(LangArray)-1].text := StringReplace(LangArray[length(LangArray)-1].text, '###', #13#10, [rfReplaceAll]);
end;
finally
ini.free;
str.Free;
end;
 
// Ausführung
 
if paramstr(1) = '/dllreg' then
begin
if not DLLRegister(paramstr(2), true) then
MessageBox(0, pchar(GetLangEntry('failed')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR);
end;
if paramstr(1) = '/dllunreg' then
begin
if not DLLRegister(paramstr(2), false) then
MessageBox(0, pchar(GetLangEntry('failed')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR);
end;
if paramstr(1) = '/typereg' then
begin
if not TypeRegistry(paramstr(3), paramstr(4), paramstr(2), paramstr(5), paramstr(6)) then
MessageBox(0, pchar(GetLangEntry('failed')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR);
end;
if paramstr(1) = '/typeunreg' then
begin
if not TypeUnregistry(paramstr(2)) then
MessageBox(0, pchar(GetLangEntry('failed')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR);
end;
end.
/trunk/Quelltext/Activator.dproj
0,0 → 1,69
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{14cd9141-d204-4e28-bfbf-98c371c80f2c}</ProjectGuid>
<MainSource>Activator.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>Activator.exe</DCC_DependencyCheckOutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_Define>DEBUG</DCC_Define>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType />
<BorlandProject>
<BorlandProject xmlns=""> <Delphi.Personality> <Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription"></VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
<Source>
<Source Name="MainSource">Activator.dpr</Source>
</Source>
</Delphi.Personality> </BorlandProject></BorlandProject>
</ProjectExtensions>
<ItemGroup />
<ItemGroup>
<DelphiCompile Include="Activator.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
</Project>
/trunk/Quelltext/Activator.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/Activator.rc
0,0 → 1,30
MAINICON ICON "Ressourcen\Activator\Icon.ico"
 
1 VERSIONINFO
FILEVERSION 4,1,0,0
PRODUCTVERSION 4,1,0,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "00000000"
{
VALUE "CompanyName", "ViaThinkSoft\0"
VALUE "FileDescription", "(De)Coder 4.1 Activator\0"
VALUE "FileVersion", "4.1.0.0\0"
VALUE "InternalName", "DeCoder4\0"
VALUE "LegalCopyright", "© Copyright 2001 - 2007 ViaThinkSoft\0"
VALUE "OriginalFilename", "Activator.exe\0"
VALUE "ProductName", "(De)Coder\0"
VALUE "ProductVersion", "4.1.0.0\0"
VALUE "Projektleiter", "Daniel Marschall - www.daniel-marschall.de\0"
VALUE "Webseite", "www.viathinksoft.de\0"
}
}
 
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0000 0x0000
}
}
/trunk/Quelltext/Coder.RES
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/Coder.bdsproj
0,0 → 1,184
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{330DE6B7-A3D3-4BA5-8A58-A9C03F32CC41}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">Coder.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">8</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">1</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">0</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">0</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">1</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">False</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">False</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">0</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">False</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription">(De)Coder 4.1</Linker>
<Linker Name="GenerateHpps">False</Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath">..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES</Directories>
<Directories Name="Packages">vcl;rtl;vclx;VclSmp;vclshlctrls;elpackD6;MSI_D6_Rtl;DEC4D6;KZ</Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD">C:\Dokumente und Einstellungen\Daniel Marschall.NEW\Desktop\(De)Coder 4.1</Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">4</VersionInfo>
<VersionInfo Name="MinorVer">1</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">(De)Coder 4.1</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">4.1.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">DeCoder41</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">© Copyright 2001 - 2007 ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks">Keine</VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">Coder.exe</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">(De)Coder</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">4.1.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Projektleiter">Daniel Marschall - www.daniel-marschall.de</VersionInfoKeys>
<VersionInfoKeys Name="Webseite">www.viathinksoft.de</VersionInfoKeys>
</VersionInfoKeys>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000000</Language>
<Language Name="RootDir"></Language>
</Language>
<Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclib100.bpl">Borland InterBase Express Components</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIntraweb_80_100.bpl">Intraweb 8.0 Design Package for Borland Development Studio 2006</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyCore100.bpl">Indy 10 Core Design Time</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclsmp100.bpl">Borland Sample Components</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyProtocols100.bpl">Indy 10 Protocols Design Time</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dcltee100.bpl">TeeChart-Komponenten</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
</BorlandProject>
/trunk/Quelltext/Coder.cfg
0,0 → 1,44
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-LN"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-U"..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES"
-O"..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES"
-I"..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES"
-R"..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES"
-w-SYMBOL_PLATFORM
-w-BOUNDS_ERROR
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST
/trunk/Quelltext/Coder.dpr
0,0 → 1,25
program Coder;
 
uses
Forms,
Warten in 'Warten.pas' {WartenForm},
Main in 'Main.pas' {MainForm},
Config in 'Config.pas' {ConfigForm},
About in 'About.pas' {AboutForm},
Elemente in 'Elemente.pas' {ElementeForm};
 
{$R Coder.res}
 
begin
Application.Initialize;
Application.Title := '(De)Coder 4.1';
Application.ShowMainForm := false; // wichtig, damit fenster bei befehlszeile nicht aufflackert
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TWartenForm, WartenForm);
Application.CreateForm(TConfigForm, ConfigForm);
Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TElementeForm, ElementeForm);
MainForm.Start;
Application.Run;
//halt(mainform.errorlevel);
end.
/trunk/Quelltext/Coder.dproj
0,0 → 1,120
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{330de6b7-a3d3-4ba5-8a58-a9c03f32cc41}</ProjectGuid>
<MainSource>Coder.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>Coder.exe</DCC_DependencyCheckOutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_UnitSearchPath>..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES</DCC_UnitSearchPath>
<DCC_ResourcePath>..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES</DCC_ResourcePath>
<DCC_ObjPath>..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES</DCC_ObjPath>
<DCC_IncludePath>..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES</DCC_IncludePath>
<DCC_Define>RELEASE</DCC_Define>
<DCC_SYMBOL_PLATFORM>False</DCC_SYMBOL_PLATFORM>
<DCC_BOUNDS_ERROR>False</DCC_BOUNDS_ERROR>
<DCC_Description>(De)Coder 4.1</DCC_Description>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_UnitSearchPath>..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES</DCC_UnitSearchPath>
<DCC_ResourcePath>..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES</DCC_ResourcePath>
<DCC_ObjPath>..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES</DCC_ObjPath>
<DCC_IncludePath>..\VCL_KAZIP;..\VCL_DRAGDROP;..\VCL_DEC;..\INCLUDES</DCC_IncludePath>
<DCC_Define>DEBUG</DCC_Define>
<DCC_SYMBOL_PLATFORM>False</DCC_SYMBOL_PLATFORM>
<DCC_BOUNDS_ERROR>False</DCC_BOUNDS_ERROR>
<DCC_Description>(De)Coder 4.1</DCC_Description>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType />
<BorlandProject>
<BorlandProject xmlns=""> <Delphi.Personality> <Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD">C:\Dokumente und Einstellungen\Daniel Marschall.NEW\Desktop\(De)Coder 4.1</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">4</VersionInfo>
<VersionInfo Name="MinorVer">1</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">(De)Coder 4.1</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">4.1.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">DeCoder41</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">© Copyright 2001 - 2007 ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks">Keine</VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">Coder.exe</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">(De)Coder</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">4.1.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Projektleiter">Daniel Marschall - www.daniel-marschall.de</VersionInfoKeys>
<VersionInfoKeys Name="Webseite">www.viathinksoft.de</VersionInfoKeys>
</VersionInfoKeys>
<Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclib100.bpl">Borland InterBase Express Components</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIntraweb_80_100.bpl">Intraweb 8.0 Design Package for Borland Development Studio 2006</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyCore100.bpl">Indy 10 Core Design Time</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclsmp100.bpl">Borland Sample Components</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyProtocols100.bpl">Indy 10 Protocols Design Time</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dcltee100.bpl">TeeChart-Komponenten</Excluded_Packages>
</Excluded_Packages>
<Source>
<Source Name="MainSource">Coder.dpr</Source>
</Source>
</Delphi.Personality> </BorlandProject></BorlandProject>
</ProjectExtensions>
<ItemGroup />
<ItemGroup>
<DelphiCompile Include="Coder.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="About.pas">
<Form>AboutForm</Form>
</DCCReference>
<DCCReference Include="Config.pas">
<Form>ConfigForm</Form>
</DCCReference>
<DCCReference Include="Elemente.pas">
<Form>ElementeForm</Form>
</DCCReference>
<DCCReference Include="Main.pas">
<Form>MainForm</Form>
</DCCReference>
<DCCReference Include="Warten.pas">
<Form>WartenForm</Form>
</DCCReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
</Project>
/trunk/Quelltext/Coder.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/Coder.rc
0,0 → 1,50
MAINICON ICON "Ressourcen\Coder\Icon_1.ico"
 
100 ICON "Ressourcen\Coder\Icon_2.ico"
 
101 ICON "Ressourcen\Coder\Icon_3.ico"
 
102 ICON "Ressourcen\Coder\Icon_4.ico"
 
103 ICON "Ressourcen\Coder\Icon_5.ico"
 
104 ICON "Ressourcen\Coder\Icon_6.ico"
 
INFORMATION BITMAP "Ressourcen\Coder\Information.bmp"
 
WARNING BITMAP "Ressourcen\Coder\Warning.bmp"
 
ERROR BITMAP "Ressourcen\Coder\Error.bmp"
 
SCHLOSS BITMAP "Ressourcen\Coder\Schloss.bmp"
 
NOOPEN BITMAP "Ressourcen\Coder\Noopen.bmp"
 
1 VERSIONINFO
FILEVERSION 4,1,0,0
PRODUCTVERSION 4,1,0,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "00000000"
{
VALUE "CompanyName", "ViaThinkSoft\0"
VALUE "FileDescription", "(De)Coder 4.1\0"
VALUE "FileVersion", "4.1.0.0\0"
VALUE "InternalName", "DeCoder4\0"
VALUE "LegalCopyright", "© Copyright 2001 - 2007 ViaThinkSoft\0"
VALUE "OriginalFilename", "Coder.exe\0"
VALUE "ProductName", "(De)Coder\0"
VALUE "ProductVersion", "4.1.0.0\0"
VALUE "Projektleiter", "Daniel Marschall - www.daniel-marschall.de\0"
VALUE "Webseite", "www.viathinksoft.de\0"
}
}
 
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0000 0x0000
}
}
/trunk/Quelltext/Config.dfm
0,0 → 1,146
object ConfigForm: TConfigForm
Left = 247
Top = 168
BorderIcons = [biSystemMenu]
BorderStyle = bsSingle
Caption = '#'
ClientHeight = 321
ClientWidth = 473
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
OnCreate = form_create
OnHide = form_hide
OnShow = form_show
PixelsPerInch = 96
TextHeight = 13
object btn_close: TButton
Left = 160
Top = 288
Width = 145
Height = 25
Cancel = True
Caption = '#'
Default = True
TabOrder = 0
OnClick = btn_close_click
end
object grp_system: TGroupBox
Left = 8
Top = 8
Width = 457
Height = 169
TabOrder = 1
object lbl_info2: TLabel
Left = 40
Top = 128
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_info1: TLabel
Left = 16
Top = 24
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object img_information: TImage
Left = 16
Top = 128
Width = 16
Height = 16
Transparent = True
end
object sys_checkbox1: TCheckBox
Left = 16
Top = 48
Width = 425
Height = 17
Caption = '#'
TabOrder = 0
OnClick = sys_checkbox1_click
end
object sys_checkbox2: TCheckBox
Left = 16
Top = 64
Width = 425
Height = 17
Caption = '#'
TabOrder = 1
OnClick = sys_checkbox2_click
end
object sys_checkbox3: TCheckBox
Left = 16
Top = 80
Width = 425
Height = 17
Caption = '#'
TabOrder = 2
OnClick = sys_checkbox3_click
end
object sys_checkbox4: TCheckBox
Left = 16
Top = 96
Width = 425
Height = 17
Caption = '#'
TabOrder = 3
OnClick = sys_checkbox4_click
end
end
object grp_keylogger: TGroupBox
Left = 8
Top = 184
Width = 457
Height = 97
Caption = '#'
TabOrder = 2
object lbl_key_info: TLabel
Left = 16
Top = 24
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_bytes: TLabel
Left = 80
Top = 72
Width = 7
Height = 13
Caption = '#'
end
object edt_garbarge: TEdit
Left = 16
Top = 64
Width = 41
Height = 21
ReadOnly = True
TabOrder = 0
Text = '0'
end
object upd_garbarge: TUpDown
Left = 56
Top = 64
Width = 17
Height = 25
TabOrder = 1
OnClick = upd_garbargeClick
end
end
object tmr_timer: TTimer
Enabled = False
Interval = 500
OnTimer = timer_timer
Left = 424
Top = 24
end
end
/trunk/Quelltext/Config.pas
0,0 → 1,258
unit Config;
 
interface
 
uses
Windows, Messages, SysUtils, Forms, shellapi, registry, inifiles, DCConst,
ExtCtrls, StdCtrls, ComCtrls, Controls, Classes;
 
type
TConfigForm = class(TForm)
btn_close: TButton;
lbl_info1: TLabel;
lbl_info2: TLabel;
grp_system: TGroupBox;
img_information: TImage;
tmr_timer: TTimer;
sys_checkbox1: TCheckBox;
sys_checkbox2: TCheckBox;
sys_checkbox3: TCheckBox;
sys_checkbox4: TCheckBox;
grp_keylogger: TGroupBox;
lbl_key_info: TLabel;
edt_garbarge: TEdit;
upd_garbarge: TUpDown;
lbl_bytes: TLabel;
procedure btn_close_click(Sender: TObject);
procedure form_create(Sender: TObject);
procedure timer_timer(Sender: TObject);
procedure sys_checkbox1_click(Sender: TObject);
procedure sys_checkbox2_click(Sender: TObject);
procedure sys_checkbox3_click(Sender: TObject);
procedure sys_checkbox4_click(Sender: TObject);
procedure form_show(Sender: TObject);
procedure form_hide(Sender: TObject);
procedure upd_garbargeClick(Sender: TObject; Button: TUDBtnType);
private
LangArray: array of TLanguageEntry;
function GetLangEntry(name: string): string;
end;
 
var
ConfigForm: TConfigForm;
 
implementation
 
uses Main;
 
{$R *.dfm}
 
function TConfigForm.GetLangEntry(name: string): string;
var
i: integer;
begin
for i := 0 to high(LangArray) do
begin
if LangArray[i].name = name then
begin
result := LangArray[i].text;
break;
end;
end;
end;
 
procedure TConfigForm.timer_timer(Sender: TObject);
var
Reg: TRegistry;
begin
sys_checkbox1.OnClick := nil;
sys_checkbox2.OnClick := nil;
sys_checkbox3.OnClick := nil;
sys_checkbox4.OnClick := nil;
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
sys_checkbox1.checked := Reg.KeyExists('.dc4') and Reg.KeyExists('DeCoder4-File');
sys_checkbox2.checked := Reg.KeyExists('*\shellex\ContextMenuHandlers\(De)Coder') and Reg.KeyExists('*\shellex\ContextMenuHandlers\(De)Coder');
sys_checkbox3.checked := Reg.KeyExists('*\shellex\ContextMenuHandlers\(De)Coder-Erase') and Reg.KeyExists('*\shellex\ContextMenuHandlers\(De)Coder-Erase');
sys_checkbox4.checked := Reg.KeyExists('CLSID\{54069E5A-C471-4B68-835C-FC845E64040B}');
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('SOFTWARE\ViaThinkSoft\(De)Coder\', true) then
begin
if not reg.ValueExists('GarbargeCount') then
reg.WriteInteger('GarbargeCount', StdGarbarge);
upd_garbarge.Position := reg.ReadInteger('GarbargeCount');
edt_garbarge.Text := inttostr(upd_garbarge.Position);
reg.CloseKey;
end;
finally
Reg.free;
end;
sys_checkbox1.OnClick := sys_checkbox1_click;
sys_checkbox2.OnClick := sys_checkbox2_click;
sys_checkbox3.OnClick := sys_checkbox3_click;
sys_checkbox4.OnClick := sys_checkbox4_click;
end;
 
procedure TConfigForm.upd_garbargeClick(Sender: TObject; Button: TUDBtnType);
var
reg: tregistry;
begin
edt_garbarge.Text := inttostr(upd_garbarge.Position);
reg := tregistry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
if reg.OpenKey('SOFTWARE\ViaThinkSoft\(De)Coder\', true) then
begin
reg.WriteInteger('GarbargeCount', upd_garbarge.Position);
reg.CloseKey;
end;
finally
reg.free;
end;
end;
 
procedure TConfigForm.btn_close_click(Sender: TObject);
begin
close;
end;
 
procedure TConfigForm.sys_checkbox1_click(Sender: TObject);
begin
if fileexists(extractfilepath(application.ExeName)+activator) then
begin
if sys_checkbox1.Checked then
shellexecute(application.Handle, 'open', pchar(extractfilepath(application.ExeName)+activator), pchar('/typereg .dc4 "'+application.exename+'" 1 DeCoder4-File "'+Format(GetLangEntry('dc4file'), [DC4Ver])+'"'), pchar(extractfilepath(application.exename)), sw_normal)
else
shellexecute(application.Handle, 'open', pchar(extractfilepath(application.ExeName)+activator), pchar('/typeunreg .dc4'), pchar(extractfilepath(application.exename)), sw_normal);
end;
end;
 
procedure TConfigForm.sys_checkbox2_click(Sender: TObject);
begin
if fileexists(extractfilepath(application.ExeName)+activator) then
begin
if sys_checkbox2.Checked then
shellexecute(application.Handle, 'open', pchar(extractfilepath(application.ExeName)+activator), pchar('/dllreg "'+extractfilepath(application.exename)+'ShlExt.dll"'), pchar(extractfilepath(application.ExeName)), sw_normal)
else
shellexecute(application.Handle, 'open', pchar(extractfilepath(application.ExeName)+activator), pchar('/dllunreg "'+extractfilepath(application.exename)+'ShlExt.dll"'), pchar(extractfilepath(application.ExeName)), sw_normal);
end;
end;
 
procedure TConfigForm.sys_checkbox3_click(Sender: TObject);
begin
if fileexists(extractfilepath(application.ExeName)+activator) then
begin
if sys_checkbox3.Checked then
shellexecute(application.Handle, 'open', pchar(extractfilepath(application.ExeName)+activator), pchar('/dllreg "'+extractfilepath(application.exename)+'ShlErase.dll"'), pchar(extractfilepath(application.ExeName)), sw_normal)
else
shellexecute(application.Handle, 'open', pchar(extractfilepath(application.ExeName)+activator), pchar('/dllunreg "'+extractfilepath(application.exename)+'ShlErase.dll"'), pchar(extractfilepath(application.ExeName)), sw_normal);
end;
end;
 
procedure TConfigForm.sys_checkbox4_click(Sender: TObject);
begin
if fileexists(extractfilepath(application.ExeName)+activator) then
begin
if sys_checkbox4.Checked then
shellexecute(application.Handle, 'open', pchar(extractfilepath(application.ExeName)+activator), pchar('/dllreg "'+extractfilepath(application.exename)+'SecureMoveExt.dll"'), pchar(extractfilepath(application.ExeName)), sw_normal)
else
shellexecute(application.Handle, 'open', pchar(extractfilepath(application.ExeName)+activator), pchar('/dllunreg "'+extractfilepath(application.exename)+'SecureMoveExt.dll"'), pchar(extractfilepath(application.ExeName)), sw_normal);
end;
end;
 
procedure TConfigForm.form_hide(Sender: TObject);
begin
tmr_timer.Enabled := false;
end;
 
procedure TConfigForm.form_show(Sender: TObject);
begin
tmr_timer.Enabled := true;
timer_timer(self);
end;
 
procedure TConfigForm.form_create(Sender: TObject);
var
ini: TIniFile;
str: TStringList;
i, temp: integer;
begin
// Sprachdatei auslesen
 
ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Language.ini');
str := TStringList.Create();
try
ini.ReadSection(Name, str);
for i := 0 to str.count-1 do
begin
setlength(LangArray, length(LangArray)+1);
LangArray[length(LangArray)-1].name := str.strings[i];
LangArray[length(LangArray)-1].text := ini.ReadString(name, str.strings[i], '?');
LangArray[length(LangArray)-1].text := StringReplace(LangArray[length(LangArray)-1].text, '###', #13#10, [rfReplaceAll]);
end;
finally
ini.free;
str.Free;
end;
 
// Formular vorbereiten
 
lbl_info1.Caption := GetLangEntry('confinfo1');
lbl_info2.Caption := GetLangEntry('restartinfo');
lbl_key_info.Caption := Format(GetLangEntry('keyinfo'), [StdGarbarge]);
grp_system.Caption := GetLangEntry('operatingsystem');
grp_keylogger.Caption := GetLangEntry('keycapt');
btn_close.Caption := GetLangEntry('close');
lbl_bytes.Caption := GetLangEntry('bytes');
 
sys_checkbox1.Caption := GetLangEntry('confinfo2');
sys_checkbox2.Caption := GetLangEntry('confinfo3');
sys_checkbox3.Caption := GetLangEntry('confinfo4');
sys_checkbox4.Caption := GetLangEntry('confinfo5');
 
caption := GetLangEntry('caption');
icon.LoadFromResourceID(hInstance, 103);
img_information.Picture.Bitmap.LoadFromResourceName(hInstance, 'Information');
 
// Bei verschiedenen Sprachen gibt es verschiedene Label-Größen!
// Leider gibt es bei TCheckBox keine Zeilenumbrüche oder AutoSize
 
// Vertikale Anpassung
 
sys_checkbox1.Top := lbl_info1.Top + lbl_info1.Height + 16;
sys_checkbox2.top := sys_checkbox1.top + sys_checkbox1.Height;
sys_checkbox3.top := sys_checkbox2.top + sys_checkbox2.Height;
sys_checkbox4.top := sys_checkbox3.top + sys_checkbox3.Height;
img_information.top := sys_checkbox4.top + sys_checkbox4.height + 16;
lbl_info2.top := img_information.top;
grp_system.Height := lbl_info2.Top + lbl_info2.Height + 16;
upd_garbarge.Top := lbl_key_info.Top + lbl_key_info.Height + 8;
grp_keylogger.Height := upd_garbarge.Top + upd_garbarge.Height + 16;
edt_garbarge.Top := upd_garbarge.Top;
upd_garbarge.Height := edt_garbarge.Height;
grp_keylogger.top := grp_system.Top + grp_system.Height + 8;
btn_close.top := grp_keylogger.Top + grp_keylogger.Height + 8;
clientheight := btn_close.Top + btn_close.Height + 8;
lbl_bytes.top := upd_garbarge.top + upd_garbarge.Height div 2 - lbl_bytes.Height div 2;
 
// Horizontale Anpassung
temp := max_3(lbl_info1.width, lbl_info2.Width+img_information.width+(lbl_info2.left-img_information.left-img_information.width), lbl_key_info.Width);
sys_checkbox1.Width := temp;
sys_checkbox2.Width := temp;
sys_checkbox3.Width := temp;
sys_checkbox4.Width := temp;
grp_system.Width := temp + 32;
grp_keylogger.Width := grp_system.Width;
upd_garbarge.Left := edt_garbarge.Left + edt_garbarge.Width + 1;
clientwidth := grp_system.Left + grp_system.Width + 8;
btn_close.Left := clientwidth div 2 - btn_close.width div 2;
 
// Werte
 
edt_garbarge.Text := inttostr(upd_garbarge.Position);
timer_timer(self);
end;
 
end.
/trunk/Quelltext/DCConst.pas
0,0 → 1,126
unit DCConst;
 
interface
 
uses
Classes, SysUtils;
 
type
TLanguageEntry = record
name: string;
text: string;
end;
 
function max_2(A, B: integer): integer;
function max_3(A, B, C: integer): integer;
function max_4(A, B, C, D: integer): integer;
function max_7(A, B, C, D, E, F, G: integer): integer;
 
function paramstr_firstposition(str: string): integer;
function paramzeile_firstposition(str: string): integer;
function ZaehleLinien(str: string): integer;
function GebeLinieaus(str: string; linie: integer): string;
 
const
// Global
DC4Ver: String = '4.1 Public Beta 4b';
 
// ConfigForm
activator = 'activator.exe';
StdGarbarge = 5;
 
var
ParamZeile: string;
 
implementation
 
function max_2(A, B: integer): integer;
begin
result := 0;
if (A >= B) then result := A;
if (B >= A) then result := B;
end;
 
function max_3(A, B, C: integer): integer;
begin
result := 0;
if (A >= B) and (A >= C) then result := A;
if (B >= A) and (B >= C) then result := B;
if (C >= A) and (C >= B) then result := C;
end;
 
function max_4(A, B, C, D: integer): integer;
begin
result := 0;
if (A >= B) and (A >= C) and (A >= D) then result := A;
if (B >= A) and (B >= C) and (B >= D) then result := B;
if (C >= A) and (C >= B) and (C >= D) then result := C;
if (D >= A) and (D >= B) and (D >= C) then result := D;
end;
 
function max_7(A, B, C, D, E, F, G: integer): integer;
begin
result := 0;
if (A >= B) and (A >= C) and (A >= D) and (A >= E) and (A >= F) and (A >= G) then result := A;
if (B >= A) and (B >= C) and (B >= D) and (B >= E) and (B >= F) and (B >= G) then result := B;
if (C >= A) and (C >= B) and (C >= D) and (C >= E) and (C >= F) and (C >= G) then result := C;
if (D >= A) and (D >= B) and (D >= C) and (D >= E) and (D >= F) and (D >= G) then result := D;
if (E >= A) and (E >= B) and (E >= C) and (E >= D) and (E >= F) and (E >= G) then result := E;
if (F >= A) and (F >= B) and (F >= C) and (F >= D) and (F >= E) and (F >= G) then result := F;
if (G >= A) and (G >= B) and (G >= C) and (G >= D) and (G >= E) and (G >= F) then result := G;
end;
 
function paramstr_firstposition(str: string): integer;
var
i: integer;
begin
result := -1;
for i := 1 to paramcount() do
begin
if paramstr(i) = lowercase(str) then
result := i;
end;
end;
 
function paramzeile_firstposition(str: string): integer;
var
i: integer;
begin
result := -1;
for i := 1 to ZaehleLinien(paramzeile) do
begin
if GebeLinieaus(paramzeile, i) = lowercase(str) then
result := i;
end;
end;
 
function ZaehleLinien(str: string): integer;
var
temp: tstringlist;
begin
temp := tstringlist.Create;
try
temp.text := str;
result := temp.count;
finally
temp.free;
end;
end;
 
function GebeLinieaus(str: string; linie: integer): string;
var
temp: tstringlist;
begin
temp := tstringlist.Create;
try
temp.text := str;
if linie <= temp.Count then
result := temp.Strings[linie-1]
else
result := '';
finally
temp.free;
end;
end;
 
end.
/trunk/Quelltext/Elemente.dfm
0,0 → 1,90
object ElementeForm: TElementeForm
Left = 0
Top = 0
BorderIcons = [biSystemMenu]
Caption = '#'
ClientHeight = 286
ClientWidth = 426
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
OnCreate = form_create
OnDestroy = form_destroy
OnResize = form_resize
OnShow = form_show
PixelsPerInch = 96
TextHeight = 13
object file_box: TListBox
Left = 0
Top = 0
Width = 426
Height = 245
Align = alClient
ItemHeight = 13
MultiSelect = True
PopupMenu = popup
Sorted = True
TabOrder = 0
end
object bottom_panel: TPanel
Left = 0
Top = 245
Width = 426
Height = 41
Align = alBottom
TabOrder = 1
object btn_close: TButton
Left = 8
Top = 8
Width = 129
Height = 25
Cancel = True
Caption = '#'
TabOrder = 0
OnClick = btn_close_click
end
object btn_remove: TButton
Left = 288
Top = 8
Width = 129
Height = 25
Caption = '#'
TabOrder = 1
OnClick = btn_remove_click
end
end
object popup: TPopupMenu
Left = 8
Top = 8
object add_file: TMenuItem
Caption = 'add_file'
ImageIndex = 17
OnClick = add_file_click
end
object add_folder: TMenuItem
Caption = 'add_folder'
ImageIndex = 18
OnClick = add_folder_click
end
object seperator: TMenuItem
Caption = '-'
end
object remove: TMenuItem
Caption = 'remove'
ImageIndex = 3
OnClick = btn_remove_click
end
end
object tmr_refresh: TTimer
Enabled = False
Interval = 100
OnTimer = tmr_refreshTimer
Left = 40
Top = 8
end
end
/trunk/Quelltext/Elemente.pas
0,0 → 1,217
unit Elemente;
 
interface
 
uses
Windows, SysUtils, Forms, Controls, Classes, StdCtrls, ExtCtrls, DragDropFile,
DragDrop, Menus, IniFiles, DCConst;
 
type
TElementeForm = class(TForm)
file_box: TListBox;
bottom_panel: TPanel;
btn_close: TButton;
btn_remove: TButton;
popup: TPopupMenu;
add_file: TMenuItem;
add_folder: TMenuItem;
seperator: TMenuItem;
remove: TMenuItem;
tmr_refresh: TTimer;
procedure form_show(Sender: TObject);
procedure btn_remove_click(Sender: TObject);
procedure btn_close_click(Sender: TObject);
procedure form_create(Sender: TObject);
procedure dropfile_drop(Sender: TObject; ShiftState: TShiftState;
Point: TPoint; var Effect: Integer);
procedure form_destroy(Sender: TObject);
procedure add_folder_click(Sender: TObject);
procedure add_file_click(Sender: TObject);
procedure form_resize(Sender: TObject);
procedure tmr_refreshTimer(Sender: TObject);
private
LangArray: array of TLanguageEntry;
function GetLangEntry(name: string): string;
public
DropFile: TDropFileTarget;
end;
 
var
ElementeForm: TElementeForm;
 
implementation
 
uses Main;
 
{$R *.dfm}
 
function TElementeForm.GetLangEntry(name: string): string;
var
i: integer;
begin
for i := 0 to high(LangArray) do
begin
if LangArray[i].name = name then
begin
result := LangArray[i].text;
break;
end;
end;
end;
 
procedure TElementeForm.tmr_refreshTimer(Sender: TObject);
begin
tmr_refresh.Enabled := false;
 
file_box.Repaint;
end;
 
procedure TElementeForm.btn_close_click(Sender: TObject);
begin
close;
end;
 
procedure TElementeForm.btn_remove_click(Sender: TObject);
var
i: integer;
begin
try
mainform.KaZip.close;
except
 
end;
 
mainform.KaZip.Open(mainform.fileopen);
try
for i := 0 to file_box.Items.Count - 1 do
begin
if file_box.Selected[i] then
mainform.KaZip.Remove(file_box.Items.Strings[i]);
end;
 
// form_show(self);
file_box.Clear;
for i := 0 to mainform.KaZip.FileNames.Count - 1 do
file_box.Items.Add(mainform.KaZip.FileNames.Strings[i]);
 
mainform.edt_vle4.Text := mainform.BestimmeDateiGroesse(mainform.fileopen);
finally
mainform.KaZip.close;
end;
end;
 
procedure TElementeForm.add_file_click(Sender: TObject);
begin
mainform.m_dateiensammlung_add_file.Click;
form_show(self);
end;
 
procedure TElementeForm.form_create(Sender: TObject);
var
ini: TIniFile;
str: TStringList;
i: integer;
begin
// Sprachdatei auslesen
 
ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Language.ini');
str := TStringList.Create();
try
ini.ReadSection(Name, str);
for i := 0 to str.count-1 do
begin
setlength(LangArray, length(LangArray)+1);
LangArray[length(LangArray)-1].name := str.strings[i];
LangArray[length(LangArray)-1].text := ini.ReadString(name, str.strings[i], '?');
LangArray[length(LangArray)-1].text := StringReplace(LangArray[length(LangArray)-1].text, '###', #13#10, [rfReplaceAll]);
end;
finally
ini.free;
str.Free;
end;
 
// Form vorbereiten
 
DropFile := TDropFileTarget.Create(self);
DropFile.Dragtypes := [dtCopy];
DropFile.OnDrop := dropfile_drop;
 
DropFile.Register(elementeform);
 
popup.Images := mainform.imagelist;
 
btn_close.caption := GetLangEntry('close');
btn_remove.caption := GetLangEntry('remove');
caption := GetLangEntry('caption');
 
add_file.Caption := GetLangEntry('add_file');
add_folder.Caption := GetLangEntry('add_folder');
remove.Caption := GetLangEntry('remove');
end;
 
procedure TElementeForm.dropfile_drop(Sender: TObject; ShiftState: TShiftState;
Point: TPoint; var Effect: Integer);
var
i: integer;
begin
effect := DROPEFFECT_NONE; // damit stürzt Windows 95 nicht ab
 
mainform.steuerelementesperren(true);
mainform.zeige_wartenform(true);
try
 
for i := 0 to DropFile.Files.Count - 1 do
begin
mainform.addtozip(DropFile.Files.Strings[i], mainform.fileopen);
end;
 
mainform.edt_vle4.Text := mainform.BestimmeDateiGroesse(mainform.fileopen);
form_show(self);
 
finally
mainform.steuerelementesperren(false);
mainform.zeige_wartenform(false);
tmr_refresh.Enabled := true;
end;
end;
 
procedure TElementeForm.form_resize(Sender: TObject);
begin
btn_remove.Left := bottom_panel.width - btn_remove.Width - 8;
end;
 
procedure TElementeForm.form_destroy(Sender: TObject);
begin
try
dropfile.free;
except
end;
end;
 
procedure TElementeForm.form_show(Sender: TObject);
var
i: integer;
begin
try
mainform.KaZip.close;
except
 
end;
 
mainform.KaZip.Open(mainform.fileopen);
try
file_box.Clear;
for i := 0 to mainform.KaZip.FileNames.Count - 1 do
file_box.Items.Add(mainform.KaZip.FileNames.Strings[i]);
finally
mainform.KaZip.close;
end;
end;
 
procedure TElementeForm.add_folder_click(Sender: TObject);
begin
mainform.m_dateiensammlung_add_folder.Click;
form_show(self);
end;
 
end.
/trunk/Quelltext/Help.html
0,0 → 1,816
<html>
 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="style.css" type="text/css">
<title>(De)Coder 4.1 Hilfe</title>
</head>
 
<body>
 
<font class="titel"><strong>(De)Coder 4.1 Handbuch</strong></font>
 
<br><br><font size="+1"><b>Achtung!</b> Es handelt sich hierbei um eine Beta-Version. Bitte pr&uuml;fen Sie regelm&auml;&szlig;ig auf Updates, um die finale Version zu erhalten.</font>
 
<p><a name="i"><font class="ueberschrift">Inhalte</font></a></p>
 
<ul>
<li><a href="#1"><strong>Allgemeines zu (De)Coder 4.1</strong>
</a><ol>
<li>Neuerungen von (De)Coder 4</li>
<li>Allgemeine Hinweise </li>
<li>Sicherheitshinweise</li>
<li>Instanzen</li>
<li>Passwort vergessen, und nun?</li>
</ol>
</li>
<li><a href="#2"><strong>Befehlszeilenanleitung</strong></a><ol>
<li>CODER [Dateiname] [...] [/newinstance]</li>
<li>CODER [Eingabe] [...] /c [Passwort] [Ausgabe]</li>
<li>CODER [Eingabe] [...] /x [Passwort] [Ausgabe]</li>
<li>CODER [Eingabe] /e [/notsilent]</li>
<li>CODER /clean [silent] [/only=...]</li>
<li>CODER /? </li>
<li>Errorlevels </li>
</ol>
</li>
<li><a href="#3"><strong>Tempor&auml;re Dateien</strong></a></li>
<li><a href="#4"><strong>Versionsgeschichte</strong></a><ul>
<li>Version 1.0</li>
<li>Version 2.0</li>
<li>Version 2.1</li>
<li>Version 2.2</li>
<li>Version 3.0</li>
<li>Version 3.1</li>
<li>Version 3.2</li>
<li>Version 4.0</li>
<li>Version 4.1</li>
</ul>
</li>
<li><a href="#5"><strong>Funktionsweisen</strong></a> </li>
<li><a href="#6"><strong>Lizenz</strong></a> </li>
<li><a href="#7"><strong>&Uuml;ber dieses Programm</strong></a> </li>
</ul>
 
<p><a name="1"><font size="5"><font class="ueberschrift">Allgemeines
zu (De)Coder 4.1</font></font></a></p>
 
<p><b>Neuerungen von (De)Coder 4</b></p>
 
<p>Vielen Dank, dass Sie sich f&uuml;r (De)Coder 4 entschieden
haben!</p>
 
<p>Das von Daniel Marschall entwickelte Programm (De)Coder ist
nun nach sehr langer Pause in Version 4 erschienen. Es gibt
etliche Neuerungen und nun eine optimale Datensicherheit durch
den AES-Standard.</p>
 
<p>Es gibt folgende Neuerungen:</p>
 
<ul>
<li><em>Multilinguale Unterst&uuml;tzung<br>
</em>(De)Coder kann &uuml;ber leicht zu bearbeitende
INI-Dateien in verschiedene Sprachen &uuml;bersetzt werden, da
das Hauptprogramm Sprachneutral entwickelt wurde. Die
Sprachen Englisch, Franz&ouml;sisch und Deutsch werden von
ViaThinkSoft bereitgestellt. Die meisten Steuerelemente
von (De)Coder akzeptieren mehrzeilige Eintr&auml;ge (### Sequenz
in der Sprachdatei) und passen sich der L&auml;nge des Eintrages
an.</li>
</ul>
 
<ul>
<li><em>Prozessfortschrittserkennung und Abbruchreaktionen</em><br>
(De)Coder zeigt Ihnen bei jeder Aktion (z.B.
Verschl&uuml;sselung) den genauen Stand in Prozentangaben an.
Somit kann bei gro&szlig;en Dateien eingesch&auml;tzt werden, wie
lange der Prozess noch dauert. Desweiteren kann mitten
bei einer Aktion das Programm abgebrochen werden. Trotz
einer Abbruchreaktion wird (De)Coder versuchen, die
tempor&auml;ren Dateien zu vernichten.</li>
</ul>
 
<ul>
<li><em>Hoher Sicherheitsstandard</em><br>
(De)Coder 4 verwendet erstmals moderne und weltweit
verwendete Algorithmen. Es wird der
symmetrische&nbsp;Block-Cipher-Algorithmus &quot;<a
href="http://de.wikipedia.org/wiki/Advanced_Encryption_Standard" target="_blank">Rijndael
(AES)</a>&quot; verwendet. Das Passwort des Ciphers wird
durch das Benutzerpasswort und einen 128-Bit Seed, der
Zufallswerte enth&auml;lt, &uuml;ber den Hash-Algorithmus &quot;<a
href="http://de.wikipedia.org/wiki/Sicherer_Hash-Algorithmus" target="_blank">SHA
512</a>&quot; mit 512 Bit festgelegt. Somit ist jede
Datei verschieden - auch wenn sie immer mit dem selben
Kennwort verschl&uuml;sselt wird. Durch diese Methode kann
das Benutzerpasswort unm&ouml;glich ermittelt werden. Als
Cipher-Modus wird CTS verwendet. Dies ist ein doppelter <a
href="http://de.wikipedia.org/wiki/Cipher_Block_Chaining_Mode" target="_blank">CBC</a>.</li>
</ul>
 
<ul>
<li><em>Korrektheit des Benutzerkennworts wird ermittelt</em><br>
Nachdem eine Datei entschl&uuml;sselt wurde, wird anhand
eines Datei Hashs (wieder mit SHA 512) ermitelt, ob die
Datei korrekt entschl&uuml;sselt wurde - ist dies nicht der
Fall, ist oftmals das Benutzerkennwort falsch. </li>
</ul>
 
<ul>
<li><em>Befehlszeilenunterst&uuml;tzung<br>
</em>Sie k&ouml;nnen (De)Coder alle Befehle &uuml;ber die
Windows-Konsole geben, die sie auch visuell ausf&uuml;hren
k&ouml;nnen. Somit k&ouml;nnen Sie Ver- und Entschl&uuml;sselungen
&uuml;ber eine Stapelverarbeitungsdatei ausf&uuml;hren oder
(De)Coder in einem anderen Programm durch Aufruf mit
Parametern verwenden. (De)Coder arbeitet im Hintergrund
und kommt bei dem Befehlszeilenaufruf nicht zum
Vorschein.</li>
</ul>
 
<ul>
<li><em>Drag und Drop-Unterst&uuml;tzung<br>
</em>Sie k&ouml;nnen Dateien und Ordner einfach in das
(De)Coder fenster schieben, um Sie zu &ouml;ffnen.</li>
</ul>
 
<ul>
<li><em>Eigener Dateityp (*.dc4) - frei konfigurierbar<br>
</em>(De)Coder 4 besitzt ein eigenes Dateiformat, dass
die Erweiterung DC4 besitzt. Sowohl verschl&uuml;sselte
Ordner als auch verschl&uuml;sselte Dateien werden zu den DC4
Dateien, die auf Benutzerwunsch auch (De)Coder 4
zugewiesen werden k&ouml;nnen.</li>
</ul>
 
<ul>
<li><em>Kontextmen&uuml;eintrag f&uuml;r Dateien und Ordner - frei
konfigurierbar<br>
</em>Auf Benutzerwunsch k&ouml;nnen auch den Dateien und
Ordnern ein Kontextmen&uuml;eintrag zugewiesen werden, sodass
Sie (De)Coder noch schneller &ouml;ffnen k&ouml;nnen.</li>
</ul>
 
<ul>
<li><em>Installer / Uninstaller<br>
</em>(De)Coder 4 verf&uuml;gt &uuml;ber einen mehrsprachigen
Installer sowie Uninstaler, um sich optimal in das System
zu integrieren.</li>
</ul>
 
<ul>
<li><em>Schutz vor Keyloggern<br>
</em>Seit Version 4.1 sind die Passwortfelder vor softwarebasierenden
Keyloggern gesch&uuml;tzt, die Tastendr&uuml;cke abfangen. Nach jeder
Eingabe wird ein wenig Datenm&uuml;ll, der von der L&auml;nge her variiert,
gesendet, vom Eingabefeld jedoch ignoriert.</li>
</ul>
 
<ul>
<li><em>Sicheres L&ouml;schen<br>
</em>Seit Version 4.1 bietet (De)Coder die M&ouml;glickeit an, seperate
Daten und Ordner vollst&auml;ndig sicher zu l&ouml;schen.</li>
</ul>
 
<ul>
<li><em>Sicheres Verschieben<br>
</em>Seit Version 4.1 k&ouml;nnen Sie Dateien und Ordner sicher verschieben. Dies ist
ein Kopierprozess mit anschlie&szlig;ender sicheren L&ouml;schung.</li>
</ul>
 
<ul>
<li><em>Direktes &Ouml;ffnen<br>
</em>Seit Version 4.1 k&ouml;nnen Sie verschl&uuml;sselte Dateien und Ordner direkt
&ouml;ffnen, ohne Sie an einen bestimmten Ort abzuspeichern.</li>
</ul>
 
<ul>
<li><em>H&ouml;chste Sicherheit<br>
</em>Seit Version 4.1 l&ouml;scht (De)Coder alle tempor&auml;ren Dateien sowie ZIP-&Uuml;berst&auml;nde
durch mehrmaliges &Uuml;berschreiben, um Daten auf dem freien Speicherplatz
der Festplatte zu sch&uuml;tzen.</li>
</ul>
 
<ul>
<li><em>Dateilisten<br>
</em>(De)Coder unterst&uuml;tzt seit Version 4.1 das Anlegen und Verwalten von Dateilisten. Dadurch
k&ouml;nnen Ordner und Dateien direkt in eine DC4-Datei geschoben werden, ohne dass diese vorher in einen
Windows-Ordner verschoben werden m&uuml;ssen.</li>
</ul>
 
<p>Information: (De)Coder 4 ist nicht kompatibel mit seinen
Vorg&auml;ngern. Das bedeutet, dass Dateien, die mit &auml;lteren
Versionen von (De)Coder verschl&uuml;sselt wurden, nicht mehr
eingelesen werden k&ouml;nnen. Aufgrund der geringen Sicherheit der
alten Versionen werden diese auch nicht mehr bei den offiziellen
Downloadquellen zum Download angeboten. Der Entwicker <a
href="mailto:info@daniel-marschall.de">Daniel Marschall</a>&nbsp;bietet
noch Unterst&uuml;tzung f&uuml;r (De)Coder ab Version 3.0. Wenn Sie alte
Dateien besitzen und die dazugeh&ouml;rige Software nicht mehr haben, k&ouml;nnen Sie
(De)Coder 3.2 anfordern.</p>
 
<p>Die Bedienung des Programms d&uuml;rfte ziemlich Eindeutig sein,
deswegen erl&auml;utere ich die Bedienung hier auch nicht weiter.
Sollten Sie trotzdem fragen zum Programm haben, k&ouml;nnen Sie mir
jederzeit per E-Mail fragen stellen.</p>
 
<p><b>Allgemeine Hinweise</b></p>
 
<p>Im Allgemeinen sollte jede Datei nach der Verschl&uuml;sselung
nocheinmal zur Sicherheit entschl&uuml;sselt werden, um
sicherzustellen, dass alles funktioniert hat. Achten Sie auch auf
die korrekte Eingabe des Passworts - es wird zwischen Gro&szlig;- und
Kleinschreibung unterschieden. Deswegen sollte die Feststelltaste
deaktiviert sein; das Programm warnt Sie jedoch, wenn dies nicht
der Fall ist. </p>
 
<p>Obwohl bei der Entwicklung sehr auf das Sparen von Ressourcen
geachtet wurde, sollte mit Vorsicht vorgegangen werden, wenn
gr&ouml;&szlig;ere Dateien mit (De)Coder ver- oder entschl&uuml;sselt werden.
Es kann unter Umst&auml;nden vorkommen, dass das System f&uuml;r l&auml;ngere
Zeit auslastet oder dass die Vorg&auml;nge aufgrund von zu wenig
Arbeitsspeicher bzw. zu kleiner Auslagerungsdatei fehlschlagen.
Besonders hier ist es zu empfehlen, dass die
R&uuml;ckentschl&uuml;sselung getestet wird.</p>
 
<p>(De)Coder 4 f&uuml;hrt die Verschl&uuml;sselung bzw.
Entschl&uuml;sselung sofort nach Klick auf den Haken aus und erstellt
bei diesem Prozess eine tempor&auml;re Datei. Wenn es zu keinen
Fehlern kommt (z.B. aufgrund der Eingabe eines falschen
Passworts) wird der Benutzer aufgefordert, die Zielposition
anzugeben. Erst danach wird die tempor&auml;re Datei zum Zielort
verschoben und umbenannt. Bricht der Benutzer die
Eingabeaufforderung ab oder schl&auml;gt die Ver- bzw.
Entschl&uuml;sselung fehl, wird die tempor&auml;re Datei sofort wieder
gel&ouml;scht.</p>
 
<p>Sie sollten also bei jeder Ver- bzw. Entschl&uuml;sselung genau so
viel Speicherplatz auf dem Medium, auf dem das tempor&auml;re
Verzeichnis von Windows liegt, freihalten, wie Quelldatei gro&szlig;
ist (es wird jedoch etwas mehr empfohlen). Wenn Sie eine 100 MB
gro&szlig;e Datei verschl&uuml;sseln m&ouml;chten, dann sollten auf dem
Laufwerk noch 101 MB frei sein - auch wenn Sie die Datei
anschlie&szlig;end auf ein anderes Laufwerk speichern m&ouml;chten!</p>
 
<p>(De)Coder 4.1 verwendet ein erweitertes Dateiformat, das von (De)Coder 4.0
nicht erkannt wird. Version 4.1 toleriert das Dateiformat von Version 4.0 jedoch.</p>
 
<p><b>Sicherheitshinweise</b></p>
 
<p>Obwohl (De)Coder 4 eine extrem hohe Sicherheit aufweist,
bleiben die Quelldateien, die Sie verschl&uuml;sseln, auf der
Festplatte, wenn Sie diese nicht sicher l&ouml;schen. (De)Coder
bietet die M&ouml;glichkeit an, Quelldateien sicher zu l&ouml;schen.
Dabei wird die Datei mehrmals &uuml;berschrieben, bevor sie
unwiederruflich gel&ouml;scht wird. Durch diese Option bleiben keine
Reste der Quelldatei mehr auf dem Datentr&auml;ger zur&uuml;ck. Beachten
Sie jedoch, dass jede Datei, die Sie nicht sicher (durch
&Uuml;berschreiben) l&ouml;schen, auf dem Datentr&auml;ger
zur&uuml;ckbleibt, bis sie mit neuen Daten &uuml;berschrieben wird!</p>
 
<p>(De)Coder bietet die M&ouml;glichkeit, Dateien und Ordner auch
seperat zu vernichten. Dies hilft jedoch nicht, wenn Sie
die sensiblen Daten verschoben oder kopiert haben, weil bei diesen
Vorg&auml;ngen die Quelldaten nur einfach gel&ouml;scht werden. Ebenfalls
hilft es nicht, Daten &uuml;ber den Windows Papierkorb zu l&ouml;schen.
(De)Coder bietet keine M&ouml;glichkeit an, z.B. freien Speicherplatz
auf der Festplatte zu reinigen oder ganze Laufwerke datentechnisch zu vernichten. Benutzen Sie f&uuml;r solche Zwecke
eine speziell daf&uuml;r vorgesehene Software wie z.B. <a href="http://www.heidi.ie/eraser/" target="_blank">Eraser</a>.
(De)Coder ist seit Version 4.1 in der Lage, Dateien sicher zu verschieben.</p>
 
<p>Sie sollten bei der Wahl des Passwortes darauf achten, dass es
eine geeignete L&auml;nge (empfohlen werden mindestens 10 Zeichen)
aufweist und aus Buchstaben und Zahlen besteht. Desweiteren
sollte sowohl Gro&szlig;- als auch Kleinschreibung angewandt werden.
Es sollten keine W&ouml;rter, die in W&ouml;rterb&uuml;chern
stehen,&nbsp;verwendet werden. Durch diese Ma&szlig;nahmen verhindern
Sie einen BruteForce-Angriff.</p>
 
<p>(De)Coder ist in der Lage, Keylogger, die tastenanschl&auml;ge softwaretechnisch
abfangen, durch Datenm&uuml;ll zu blocken. Dies gilt jedoch nicht f&uuml;r hardwaretechnische
(z.B. eingebauten Chip in der Tastatur) oder spezielle Keylogger. Sie sollten Ihr System daher
z.B. mit einem Virenschutzprogramm &uuml;berpr&uuml;fen lassen. Sie k&ouml;nnen die St&auml;rke des Keyloggerschutzes in der
Konfiguration &auml;ndern oder deaktivieren. Beachten Sie, dass der PC bei zu vielen
Keyloggerschutzbytes stark ausgelastet werden kann, wodurch Tastenanschl&auml;ge unter Umst&auml;nden
nicht registriert werden k&ouml;nnen. Achten Sie daher darauf, bei hoher Keyloggerschutzbyte-Anzahl
oder bei einem langsamen oder ausgelasteten Computer langsam zu schreiben und achten
Sie auf die Sternchen, die bei den Anschl&auml;gen erscheinen.</p>
 
<p>(De)Coder verwendet zur Passwort&uuml;berpr&uuml;fung eine Hash-Pr&uuml;fsumme,
die zusammengesetzt ist aus der Hash-Pr&uuml;fsumme der Originaldatei sowie des
Seed und der Originalpasswortes. Es ist unm&ouml;glich, R&uuml;ckschl&uuml;sse
auf das Originalpasswort oder die Originaldatei zu ziehen.</p>
 
<p>Bitte beachten Sie, dass (De)Coder den originalen Dateinamen des Ordners
bzw. der Datei speichert. M&ouml;chten Sie verhindern, dass die DC4-Datei Aufschluss
&uuml;ber den Dateinamen gibt, sollten Sie die Datei oder den Ordner vorher umbenennen.</p>
 
</p><b>Instanzen</b></p>
 
<p>(De)Coder wird versuchen, immer nur eine Instanz (ein Programfenster)
ge&ouml;ffnet zu halten. Dies gilt jedoch nur f&uuml;r die normale
Ausf&uuml;hrung mit der Befehlszeile CODER bzw CODER [Dateiname]. Ist (De)Coder
besch&auml;ftigt, wird eine neue Instanz ge&ouml;ffnet.</p>
 
<p>Weitere Informationen finden Sie unter den Diagrammen bei <a href="#5">Funktionsweisen</a>.</p>
 
<p><strong>Passwort vergessen, was nun?</strong></p>
 
<p>Dann haben Sie ein Problem... Es gibt keine M&ouml;glichkeit, die
Daten ohne korrektes Passwort wieder zu entschl&uuml;sseln.</p>
 
<p><a href="#i"><strong>Zur&uuml;ck zum Inhaltsverzeichnis</strong></a></p>
 
<p><a name="2"><font size="5"><font class="ueberschrift">Befehlszeilenanleitung</font></font></a></p>
 
<p>Sie k&ouml;nnen (De)Coder auch &uuml;ber die Befehlszeile aufrufen.
Sie k&ouml;nnen Stapelverarbeitungsdateien (*.bat) erstellen, um
Prozesse abzuarbeiten. Bitte beachten Sie die korrekte Schreibweise und Reihenfolge der Parameter.</p>
 
<p><b>CODER [Dateiname] [...] [/newinstance]</b></p>
 
<p>Ist &quot;Dateiname&quot; eine Datei, dann wird (De)Coder
gestartet und die Datei ge&ouml;ffnet. Es kann sich um eine
unverschl&uuml;sselte Datei oder um eine verschl&uuml;sselte Datei bzw.
einen verschl&uuml;sselten Ordner handeln. </p>
 
<p>Ist &quot;Dateiname&quot; ein Ordner, dann wird (De)Coder
gestartet und der Ordner ge&ouml;ffnet.</p>
 
<p>Sind mehrere Dateien oder Ordner angegeben, wird werden sie
zu einem Ordner zusammengepackt und mit (De)Coder ge&ouml;ffnet.
Unter den Dateien k&ouml;nnen auch DC4-Dateien sein, die
dann jedoch noch einmal verschl&uuml;sselt werden.</p>
 
<p>Sind keine Dateien oder Ordner angegeben, wird (De)Coder normal
gestartet.</p>
 
<p>Ist in der Kommandozeile die Zeichenfolge &quot;/newinstance&quot;
enthalten, wird eine neue Instanz ge&ouml;ffnet. Dieser Parameter
wird Programmintern verwendet.</p>
 
<p>Wildcards sind erlaubt, wenn 1 Eingabe gemacht wurde.</p>
 
<p>Es entstehen keine ErrorLevels au&szlig;er 0, 10, 11.</p>
 
<p><b>CODER [Eingabe] [...] /c [Passwort] [Ausgabe]</b><br>
<b>CODER [Eingabe] [...] /x [Passwort] [Ausgabe]</b></p>
 
<p>Sicheres L&ouml;schen von Dateien</p>
 
<ul>
<li>Wird ein /c angegeben, so bleiben die Quelldaten
erhalten.</li>
<li>Bei der Angabe eines /x werden die Quelldaten (bei einem
Ordner alle Elemente mit Unterordnern) sicher durch
mehrmaliges &Uuml;berschreiben <i>unwiederruflich</i>
gel&ouml;scht (sofern kein Fehler aufgetreten ist). Es werden
auch schreibgesch&uuml;tzte Dateien gel&ouml;scht.</li>
</ul>
 
<p>Automatische Erkennung von Verschl&uuml;sselung und
Entschl&uuml;sselung</p>
 
<ul>
<li>Ist Eingabe eine verschl&uuml;sselte Datei, wird sie nach
Ausgabe entschl&uuml;sselt</li>
<li>Ist Eingabe ein verschl&uuml;sselter Ordner, wird er
entschl&uuml;sselt mit seinem originalen Namen in Ausgabe
erstellt</li>
<li>Ist Eingabe eine nicht verschl&uuml;sselte Datei, wird sie
nach Ausgabe verschl&uuml;sselt<br>
die Eingaben Cipher, Hash und Mode werden dabei zwar
ignoriert, trotzdem m&uuml;ssen es g&uuml;ltige Eingaben
(Ganzzahlen im g&uuml;ltigen Bereich) sein</li>
<li>Ist Eingabe ein Ordner, wird er gepackt und nach Ausgabe
verschl&uuml;sselt</li>
</ul>
 
<p>Wenn bereits ein Element mit dem Namen vorhanden ist</p>
 
<ul>
<li>Ist bei der Ordnerentschl&uuml;sselung in Ausgabe bereits ein
Verzeichnis mit dem originalen Namen vorhanden, wird ein
alternativer Name gew&auml;hlt. </li>
<li>Ist Ausgabe bei einer Verschl&uuml;sselung bereits vorhanden,
wird es &uuml;berschrieben.</li>
</ul>
 
<p>Kontrolle der Dateinamenserweiterungen</p>
 
<ul>
<li>Hat Ausgabe bei einer Verschl&uuml;sselung nicht die
Erweiterung &quot;.dc4&quot;, wird diese Angabe
hinzugef&uuml;gt.</li>
<li>Hat Ausgabe bei einer Entschl&uuml;sselung die Erweiterung
&quot;.dc4&quot;, wird diese Angabe entfernt.</li>
</ul>
 
<p>Anmerkungen</p>
 
<ul>
<li>Wildcards sind erlaubt, wenn 1 Eingabe angegeben wurde</li>
<li>Es k&ouml;nnen mehrere Eingabedateien- und Ordner angegeben
werden. In diesem Fall wird eine Dateiliste angelegt. Verschl&uuml;sselte
DC4-Dateien werden jedoch ebenfalls in das Archiv gepackt und nicht entschl&uuml;sselt.</li>
<li>Existiert das Ausgabeverzeichnis nicht, so werden alle
Unterverzeichnisse automatisch erstellt.</li>
<li>Wenn Sie den Ordner in das selbe Verzeichnis
entschl&uuml;sseln m&ouml;chten, so geben Sie als Ausgabe einen
Punkt (.) an&nbsp;- eine leere Eingabe f&uuml;r den Parameter
&quot;Ausgabe&quot; w&uuml;rde einen Syntaxfehler
hervorrufen. </li>
</ul>
 
<p>Beispiel f&uuml;r eine Stapelverwaltungsdatei (*.bat)</p>
 
<p><code>@ ECHO OFF<br>
CODER &quot;Meine Textdatei.txt&quot; /c &quot;Mein
Passwort&quot; &quot;Verschluesselt.dc4&quot;<br>
ECHO %ERRORLEVEL% <br>
CODER &quot;Verschluesselt.dc4&quot; /c &quot;Mein Passwort&quot;
&quot;Rueckverschluesselung.txt&quot;<br>
ECHO %ERRORLEVEL% <br>
ECHO. <br>
ECHO Vergleiche Dateien... <br>
ECHO. <br>
FC &quot;Meine Textdatei.txt&quot;
&quot;Rueckverschluesselung.txt&quot;<br>
PAUSE</code></p>
 
<p>Es k&ouml;nnen alle ErrorLevels au&szlig;er 8 und 9 zur&uuml;ckgegeben werden.</p>
 
<p><b>CODER [Eingabe] /e [/notsilent]</b></p>
 
<p>Vernichtet die Datei oder den Ordner "Eingabe".</p>
 
<p>Ist /notsilent gesetzt, werden Windows-Meldungen anstatt von ErrorLevels ausgegeben.</p>
 
<p>Wildcards sind erlaubt.</p>
 
<p>Es k&ouml;nnen folgende ErrorLevels entstehen: 0 (OK), 3 (Syntaxfehler), 8 (Fehler), 9 (Nicht gefunden), 11.</p>
 
<p><b>CODER /clean [/silent] [/only=...]</b></p>
 
<p>Fordert (De)Coder dazu auf, die tempor&auml;ren Dateien manuell zu
entfernen. Dies wird normalerwei&szlig;e automatisch durchgef&uuml;hrt.
Der Parameter &quot;/silent&quot; unterdr&uuml;ckt zus&auml;tzlich
jegliche Ausgabe. Der Parameter &quot;only&quot; wird in der Regel nur
programmintern benutzt. Dabei werden nur die Dateien einer bestimmten
Sitzungsnummer gel&ouml;scht.</p>
 
<p>Ist Silent-Modus aktiviert, entstehen folgende ErrorLevels: 0 (OK), 3 (Syntaxfehler), 8 (Fehler), 11.</p>
 
<p><b>CODER /?</b></p>
 
<p>&Ouml;ffnet die (De)Coder-Hilfe (diese hier). </p>
 
<p>Es entstehen keine ErrorLevels au&szlig;er 0, 3 und 11.</p>
 
<p><strong>Errorlevels</strong> </p>
 
<p>(De)Coder arbeitet bei der letzten Variante ausschlie&szlig;lich im
Hintergrund und gibt keine Meldungen (z.B. Fehler) aus. Um Fehler
zu Diagnostizieren, werden sogenannte Errorlevels vom Programm
ausgegeben.</p>
 
<p>Es existieren folgende Errorlevels:</p>
 
<p><code>Errorlevel 0 = Kein Fehler<br>
Errorlevel 1 = DC4 Datei besch&auml;digt <br>
Errorlevel 2 = Fehler bei Ver-/Entschl&uuml;sselung <br>
Errorlevel 3 = Falsche Syntax<br>
Errorlevel 4 = Ausgabeverzeichnis konnte nicht erstellt werden <br>
Errorlevel 5 = Datei konnte nicht zur Zielposition verschoben
werden <br>
Errorlevel 6 = Quelldateien konnten nicht vollst&auml;ndig gel&ouml;scht
werden. <br>
Errorlevel 7 = Internes ZIP-Archiv fehlerhaft<br>
ErrorLevel 8 = Datei oder Ordner konnte nicht oder nur teilweise entfernt werden. (*)<br>
ErrorLevel 9 = Datei oder Ordner nicht gefunden. (*)<br>
ErrorLevel 10 = Es existiert bereits eine Instanz. Ein neues Fenster wird ge&ouml;ffnet.<br>
ErrorLevel 11 = Schwerer Programminterner Fehler (z.B. Language.ini fehlt).</code></p>
 
<p>* Hinweis: Diese Errorlevels treten nicht bei Wildcards oder Dateisammlungen (mehrere Eingaben) auf.</p>
 
<p>Die Errorlevels k&ouml;nnen in einer Stapelverwaltungsdatei
(*.bat) folgenderma&szlig;en abgefragt werden:</p>
 
<p><code>@ ECHO OFF<br>
CODER &quot;Mein Verzeichnis&quot; /c &quot;Mein Passwort&quot;
&quot;Ausgabe.dc4&quot;<br>
<br>
IF ERRORLEVEL 11 GOTO F11 <br>
IF ERRORLEVEL 10 GOTO F10 <br>
IF ERRORLEVEL 9 GOTO F9 <br>
IF ERRORLEVEL 8 GOTO F8 <br>
IF ERRORLEVEL 7 GOTO F7 <br>
IF ERRORLEVEL 6 GOTO F6 <br>
IF ERRORLEVEL 5 GOTO F5 <br>
IF ERRORLEVEL&nbsp;4 GOTO F4 <br>
IF ERRORLEVEL&nbsp;3 GOTO F3 <br>
IF ERRORLEVEL&nbsp;2 GOTO F2 <br>
IF ERRORLEVEL&nbsp;1 GOTO F1 <br>
IF ERRORLEVEL&nbsp;0 GOTO F0 <br>
<br>
:F0 <br>
ECHO Alles OK, Errorlevel 0 <br>
GOTO ENDE <br>
<br>
:F1 <br>
ECHO DC4 Datei besch&auml;digt, Errorlevel 1 <br>
GOTO ENDE <br>
<br>
:F2 <br>
ECHO Fehler bei Ver/Entschl&uuml;sselung, Errorlevel 2 <br>
GOTO ENDE <br>
<br>
:F3 <br>
ECHO Falsche Syntax oder Datei/Verzeichnis nicht gefunden,
Errorlevel 3 <br>
GOTO ENDE <br>
<br>
:F4 <br>
ECHO Ausgabeverzeichnis konnte nicht erstellt werden, Errorlevel
4 <br>
GOTO ENDE <br>
<br>
:F5 <br>
ECHO Datei konnte nicht zur Zielposition verschoben werden,
Errorlevel&nbsp;5 <br>
GOTO ENDE <br>
<br>
:F6 <br>
ECHO Quelldateien konnten nicht vollst&auml;ndig gel&ouml;scht werden.
Errorlevel&nbsp;6 <br>
GOTO ENDE <br>
<br>
:F7 <br>
ECHO Internes ZIP-Archiv fehlerhaft, Errorlevel&nbsp;7 <br>
GOTO ENDE <br>
<br>
:F8 <br>
ECHO Datei oder Ordner konnte nicht oder nur teilweise entfernt werden, Errorlevel&nbsp;8 <br>
GOTO ENDE <br>
<br>
:F9 <br>
ECHO Datei oder Ordner nicht gefunden, Errorlevel 9 <br>
GOTO ENDE <br>
<br>
:F10 <br>
ECHO Es existiert bereits eine zweite Instanz. Ein neues Fenster wurde ge&ouml;ffnet, ErrorLevel 10<br>
GOTO ENDE <br>
<br>
:F11 <br>
ECHO Schwerer Programminterner Fehler, ErrorLevel 11<br>
GOTO ENDE <br>
<br>
:ENDE <br>
PAUSE </code></p>
 
<p>Soll keine Abfrage erfolgen, sonern nur eine einfache Ausgabe,
kann auch die Variable %ERRORCODE% ausgegeben werden.</p>
 
<p><code>@ ECHO OFF<br>
CODER &quot;Mein Verzeichnis&quot; /c &quot;Mein Passwort&quot;
&quot;Ausgabe.dc4&quot; <br>
CODER &quot;Ausgabe.dc4&quot; /c &quot;Falsches Passwort&quot;
&quot;.&quot; <br>
ECHO Das ErrorLevel ist: <br>
ECHO %ERRORLEVEL% <br>
PAUSE</code></p>
 
<p><a href="#i"><strong>Zur&uuml;ck zum Inhaltsverzeichnis</strong></a></p>
 
<p><a name="3"><font size="5"><font class="ueberschrift">Tempor&auml;re Dateien</font></font></a></p>
 
<p>(De)Coder ermittelt das tempor&auml;re Verzeichnis Ihres Systems
bzw. des aktuell angemeldeten Benutzers. Bei Windows 9x ist dies
gew&ouml;hnlicherwei&szlig;e &quot;C:\WINDOWS\TEMP&quot;, bei Windows XP
&quot;C:\Dokumente und Einstellungen\Benutzername\Lokale
Einstellungen\Temp\&quot;.</p>
 
<p><u>Das Programm erstellt folgende Dateien:</u></p>
 
<ul>
<li><b>DeCoder_[Sitzungskennung].zip:</b> &Ouml;ffnet man einen Ordner zum
Verschl&uuml;sseln, wird er gepackt. Anschlie&szlig;end wird
die tempor&auml;re ZIP-Datei ge&ouml;ffnet. Sie wird au&szlig;erdem erstellt,
wenn man einen verschl&uuml;sselten Ordner entschl&uuml;sselt oder
direkt &ouml;ffnet. Es ist die Datei, die eigentlich in der DC4 enthalten ist.<br><br></li>
<li><b>DeCoder_[Sitzungskennung].tmp:</b> Wenn eine Datei ver- oder
entschl&uuml;sselt wird, wird sie erst als DeCoder.tmp
gespeichert. W&uuml;rde die Ver- oder Entschl&uuml;sselung fehlschlagen,
dann w&uuml;rde die Zieldatei unn&ouml;tig &uuml;berschrieben werden.
Die tempor&auml;re Datei wird anschlie&szlig;end zur Benutzerwahl
umbenannt und verschoben.<br><br></li>
<li><b>DeCoder_[Sitzungskennung].cmp:</b> Dateien und Ordner werden zus&auml;tzlich mit ZLib als CMP-Datei komprimiert,
bevor sie verschl&uuml;sselt werden. Wenn entschl&uuml;sselt wird, dient die CMP-Datei
als Dekompression der TMP-Datei, die anstelle dieser dann zur Zieldatei
umbenannt/verschoben wird. Komprimierte ZIP-Dateien werden aber anschlie&szlig;end wieder zur&uuml;ck zu ZIP umbenannt
(die gleichnamige Datei wird sicher gel&ouml;scht), damit sie entpackt werden kann.<br><br></li>
<li><b>DeCoder_Sensitiv\[Sitzungskennung]\:</b> Hier werden Dateien oder Ordner
gespeichert, die direkt ge&ouml;ffnet wurden. Der Ordner DeCoder_Sensitiv
wird bei einer Reinigung komplett sicher gel&ouml;scht. Nach beendigung
einer Sitzung wird nur der entsprechende Unterordner, der die aktuellen
Sitzungsdaten enth&auml;t, gel&ouml;scht.</li>
</ul>
 
<p>Da diese Dateien sensible Daten enthalten l&ouml;scht (De)Coder
diese sofort nach Beendigung des Prozesses und &uuml;berpr&uuml;ft bei
Beendigung des Progamms nocheinmal, ob die Dateien auch gel&ouml;scht
wurden und l&ouml;scht diese gegebenenfalls. Vor dem L&ouml;schen dieser
tempor&auml;ren Dateien werden diese nocheinmal komplett mit Daten
&uuml;berschrieben, sodass keine R&uuml;ckst&auml;nde auf der Festplatte
bleiben. Zum L&ouml;schen der Daten wird nach Beendung von (De)Coder
ein neue Instanz ge&ouml;ffnet, die sich sofort wieder von selbst
beendet.</p>
 
<p>Sollte (De)Coder nicht ordnungsgem&auml;&szlig; beendet werden (z.B.
durch einen Stromausfall oder eine sofortige Beendigung des
Prozesses &uuml;ber den Taskmanager), bleiben die tempor&auml;ren Dateien erhalten und k&ouml;nnen
selbst nach normalem L&ouml;schen (z.B. durch Windows) noch eingelesen
werden. (De)Coder
legt mehrere tempor&auml;re Dateien an, damit auch mehrere Fenster
gleichzeitig ge&ouml;ffnet sein und arbeiten k&ouml;nnen. Nach jeder
Beendung einer (De)Coder-Instanz wird versucht, alle tempor&auml;ren
Daten der letzten (De)Coder-Instanz zu vernichten. Die restlichen
ggf. vorhandenen Daten bleiben jedoch erhalten. Erst nach
einem seperaten L&ouml;schauftrag (siehe Startmen&uuml;; es darf keine
Instanz ge&ouml;ffnet sein) oder nach einem Systemneustart
werden alle noch existierenden tempor&auml;ren gel&ouml;scht. Somit kommt es zu keinen
Sicherheitsl&uuml;cken, wenn (De)Coder einmal durch einen
Stromausfall oder &Auml;hnliches ausfiel.</p>
 
<p>Die Windows-Laufwerksbereinigung l&ouml;scht nur tempor&auml;re Dateien,
die &auml;lter als 1 Woche sind. In dieser Zeit wird (De)Coder mit
den Reinigungsprozessen beim Systemstart ggf. bestehende Dateien
gel&ouml;scht haben. Sie k&ouml;nnen jedoch trotzdem vor einer Laufwerksbereinigung
die (De)Coder-Bereinigung &uuml;ber das Startmen&uuml; ausf&uuml;hren. Sie sollen
keine Software verwenden, die tempor&auml;re Dateien automatisch entfernt, da
diese Proramme ggf. tempor&auml;re (De)Coder-Dateien unsicher l&ouml;scht.</p>
 
<p><a href="#i"><strong>Zur&uuml;ck zum Inhaltsverzeichnis</strong></a></p>
 
<p><a name="4"><font size="5"><font class="ueberschrift">Versionsgeschichte</font></font></a></p>
 
<p><strong>Version 1.0<br>
</strong>Die Dateien werden &uuml;ber ein
DOS-Programm&nbsp;verschl&uuml;sselt. Es werden nur die
Buchstaben&nbsp;mit anderen ersetzt. </p>
 
<p><strong>Version 2.0<br>
</strong>Es verschl&uuml;sselt als Windowsprogramm. </p>
 
<p><strong>Version 2.1<br>
</strong>Es kann eine Zahl von 1 - 255 zum&nbsp;verschl&uuml;sseln
ausgesucht werden. </p>
 
<p><strong>Version 2.2<br>
</strong>Es kann eine Zahl von 1 - 256 zum&nbsp;verschl&uuml;sseln
ausgesucht werden. </p>
 
<p><strong>Version 3.0<br>
</strong>Nun kann auch ein Passwort eingegeben&nbsp;werden. </p>
 
<p><strong>Version 3.1<br>
</strong>Nun noch viel schneller beim
verschl&uuml;sseln/entschl&uuml;sseln. </p>
 
<p><strong>Version 3.2<br>
</strong>Die Passworteingabe wird mit Sternchen
(*)&nbsp;geschrieben. </p>
 
<p><strong>Version 4.0 (Codename Gizeh)</strong><br>
Die neue Version verschl&uuml;sselt mit den neusten
Verschl&uuml;sselungsalgorithmen und ist im Vergleich zu seinen
Vorg&auml;ngern extrem sicher geworden. Der Sicherheitsstandard AES
wird eingesetzt und mit einem 512 Bit Hash sowie einem 128 Bit
Seed erg&auml;nzt.</p>
 
<p><strong>Version 4.1 (Codename Newfoundland)</strong><br>
Schlichteres Design, einige Fehler wurden behandelt und die Unterst&uuml;tzung
f&uuml;r die franz&ouml;sische Sprache hinzugef&uuml;gt. Es gibt
nun die seperate M&ouml;glichkeit, eine Datei oder einen Ordner
zu vernichten sowie Objekte sicher zu verschieben. Schutz vor Keyloggern, neues
Dateiformat, Direkt-&Ouml;ffnen-Funktion, Wildcard-Unterst&uuml;tzung uvw.</p>
 
<p><a href="#i"><strong>Zur&uuml;ck zum Inhaltsverzeichnis</strong></a></p>
 
<p><a name="5"><font size="5"><font class="ueberschrift">Funktionsweisen</font></font></a></p>
 
<ul>
<li><a href="funktionsweise_1.gif" target="_blank">Funktionsweise der Verschl&uuml;sselung von (De)Coder 4.1</a></li>
<li><a href="funktionsweise_2.gif" target="_blank">Funktionsweise der Entschl&uuml;sselung von (De)Coder 4.1</a></li>
<li><a href="funktionsweise_3.gif" target="_blank">Funktionsweise der Instanzenverwaltung von (De)Coder 4.1</a></li>
<li><a href="http://www.viathinksoft.de/info/decoder/dc4-spec.txt" target="_blank">DC4-Dateienaufbau</a> (Internetlink, in Englisch)</li>
</ul>
 
<p><a href="#i"><strong>Zur&uuml;ck zum Inhaltsverzeichnis</strong></a></p>
 
<p><a name="6"><font size="5"><font class="ueberschrift">Lizenz</font></font></a></p>
 
<code>LIZENZVEREINBARUNG F&Uuml;R (DE)CODER 4.1 VON DANIEL MARSCHALL<br>
<br>
(1) DEKLARATION DER SOFTWARE<br>
<br>
1.1 Die Software, die Sie installieren m&ouml;chten, ist sowohl als "Freeware" als auch "OpenSource" deklariert, d.h. sie ist kostenlos und der Quelltext steht f&uuml;r jeden zur Verf&uuml;gung.<br>
<br>
(2) WEITERGABEBEDINGUNGEN <br>
<br>
2.1 Sie sind berechtigt, die Software kostenlos zu kopieren und weiterzugeben sowie mithilfe des Quelltextes die Software f&uuml;r eigene Zwecke zu ver&auml;ndern.<br>
<br>
2.2 Nicht erlaubt ist es, eine ver&auml;nderte Version dieser Software ohne Erlaubnis des Autors freizugeben oder zu ver&ouml;ffentlichen.<br>
<br>
2.3 Ebenfalls ist es nicht gestattet, die Software zu verkaufen. F&uuml;r kommerzielle Nutzung sollte eine Erlaubnis des Autors eingeholt werden. Die Software darf nach Erlaubnis auf kommerziell vertriebene Datentr&auml;ger z.B. von Zeitschriften oder anderen Produkten kopiert bzw. beigelegt werden.<br>
<br>
(3) HAFTUNGSAUSSCHLUSS<br>
<br>
3.1 Der Autor dieser Software haftet nicht f&uuml;r Sch&auml;den, die durch diese verursacht wurden. Des Weiteren haftet er nicht f&uuml;r Datenverluste, die durch ein versehentliches Vernichten von Dateien durch (De)Coder entstehen k&ouml;nnen. Vergisst der Benutzer das korrekte Passwort f&uuml;r eine von ihm verschl&uuml;sselte Datei, so ist diese nicht wiederherzustellen. In diesem Fall haftet der Autor ebenfalls f&uuml;r keine Datenverluste.<br>
<br>
3.2 Das Programm wurde gr&uuml;ndlich getestet, aber trotzdem wird keine Haftung f&uuml;r Fehlfunktionen &uuml;bernommen. Die Funktionsweise ist durch den offengelegten Quelltext frei ersichtlich und transparent. Das Produkt-Release wurde negativ auf Viren gepr&uuml;ft, trotzdem kann keine Garantie &uuml;bernommen werden, dass das Setup-Package nach der Ver&ouml;ffentlichung bzw. nach dem Download z.B. durch einen Virus ver&auml;ndert oder infiziert wurde.<br>
<br>
3.3 Der Autor kann keine Haftung f&uuml;r Fehlfunktionen von Komponenten &uuml;bernehmen, die von (De)Coder genutzt werden. Die verwendeten Komponenten liegen dem Quelltext bei.<br>
<br>
3.4 Der Autor ist nicht verpflichtet, die Kompatibilit&auml;t zu alten Versionen beizubehalten oder veraltete Programmversionen f&uuml;r die Benutzer bereitzustellen.<br>
<br>
(4) ANMERKUNGEN<br>
<br>
4.1 Der Quelltext kann von <a href="http://www.viathinksoft.de/" target="_blank">www.viathinksoft.de</a> bezogen werden.<br>
<br>
4.2 Das Urheberrecht liegt bei Daniel Marschall. Alle Rechte sind vorbehalten.<br>
<br>
4.3 Durch die Installation der Software akzeptieren Sie die Vereinbarung und deren Bedingungen.<br>
<br>
4.4 Bitte beachten Sie die Bedingungen und Gesetze bez&uuml;glich Kryptografie in Ihrem Land.<br>
<br>
ENDE DER VEREINBARUNG</code>
 
<p><a href="#i"><strong>Zur&uuml;ck zum Inhaltsverzeichnis</strong></a></p>
 
<p><a name="7"><font size="5"><font class="ueberschrift">&Uuml;ber dieses Programm</font></font></a></p>
 
<p><strong>(De)Coder, Version 4.1</strong><br>
Projektleiter: Daniel Marschall<br>
Webseite: <a href="http://www.daniel-marschall.de/">www.daniel-marschall.de</a><br>
E-Mail: <a href="mailto:info@daniel-marschall.de?subject=(De)Coder 4.1">info@daniel-marschall.de</a></p>
 
<p>&copy; Copyright 2001 - 2007 <a href="http://www.viathinksoft.de/" target="_blank">ViaThinkSoft</a>.
Alle Rechte vorbehalten!</p>
 
<p>Dieses Programm wurde mit <a href="http://www.borland.de/" target="_blank">Borland&reg;</a>&nbsp;<a
href="http://www.turboexplorer.de/" target="_blank">Turbo&trade; Delphi&reg; f&uuml;r Win32&reg; Explorer</a>
erstellt und basiert auf dem <a
href="http://dec.michael-puff.de/" target="_blank"><b>Delphi Encryption
Compendium</b></a>, Version 5.1c von <a
href="mailto:HaReddmann@t-online.de">Hagen Reddmann</a>.<br>
Diese Software beinhaltet Verschl&uuml;sselungsalgorithmen (Cipher)
sowie Pr&uuml;fsummen-Algorithmen (Hash), die Urheberrechtlich
gesch&uuml;tzt sind.</p>
 
<p>Die <a href="http://www.viathinksoft.de/keytransmitter/" target="_blank">sichere Schl&uuml;ssel&uuml;bertragung</a> sowie das Updatesystem von ViaThinkSoft sind zus&auml;tzliche
Leistungen, die unabh&auml;ngig von (De)Coder sind. Die Quelltext f&uuml;r diese Dienste sind derzeit
nicht frei.</p>
 
<p>Es wurden folgende VCLs bzw. Units verwendet:</p>
 
<ul>
<li>Ordner VCL_KAZIP<br>
<a href="http://kadao.dir.bg/" target="_blank">KaZIP</a> 2.0 von <a href="mailto:kirila@abv.bg">Kiril Antonov</a> (abge&auml;ndert)<br>
<a href="http://delphi.icm.edu.pl/authors/a0002263.htm" target="_blank">BZip</a> 1.03 von <a href="mailto:efmera@yahoo.com">Edison Mera Menéndez</a><br><br></li>
 
<li>Ordner VCL_DRAGDROP:<br>
<a href="http://www.angusj.com/delphi/" target="_blank">Drag and Drop Component Suite</a> 4.0 von <a href="mailto:angusj@myrealbox.com">Angus Johnson</a> und <a href="mailto:anders@melander.dk">Anders Melander</a><br><br></li>
 
<li>Ordner VCL_DEC:<br>
<a href="http://dec.michael-puff.de/" target="_blank">Delphi Encryption Compendium</a> 5.1c von <a href="mailto:HaReddmann@t-online.de">Hagen Reddmann</a><br><br></li>
 
<!-- <li>Ordner VCL_XPMENU:<br>
<a href="http://www.shagrouni.com/english/software/xpmenu.html" target="_blank">TXPMenu</a> 3.1 von <a href="mailto:khaled@shagrouni.com">Khaled Shagrouni</a><br><br></li> -->
 
<li>Ordner INCLUDES:<br>
<a href="http://assarbad.net/de/stuff/!import/nico.old/" target="_blank">OneInst.pas</a> von <a href="mailto:oliver@assarbad.net">Assarbad</a> (abge&auml;ndert)<br>
<a href="http://www.delphipraxis.net/topic1153_base64+mime+endecoding.html" target="_blank">Base64.pas</a> von <a href="mailto:delphi3000@wischnewski.tv">Daniel Wischnewski</a><br><br></li>
</ul>
 
<p>Das Urheberrecht dieser Komponenten liegt bei den jeweiligen
Autoren. Weitere Informationen entnehmen Sie bitte den Quelltexthinweisen, die dem Quelltext beiliegt.</p>
 
<p>Systemmindestanforderungen:</p>
 
<ul>
<li><a href="http://www.microsoft.de/" target="_blank">Microsoft&reg;</a> Windows&trade; 95 oder h&ouml;her</li>
<li>Kompatibel mit <a href="http://www.microsoft.de/" target="_blank">Microsoft&reg;</a> Windows&trade; Vista&trade;</li>
<li>Borland&reg; Delphi&reg; 2005 Personal Edition oder h&ouml;her f&uuml;r Quelltext</li>
</ul>
 
<p>Der Quelltext zu (De)Coder 4.1 ist bei ViaThinkSoft
erh&auml;ltlich (siehe <a
href="http://www.viathinksoft.de/index.php?page=projektanzeige&amp;seite=projekt-18" target="_blank">Projektseite</a>).
</p>
 
<p><a href="#i"><strong>Zur&uuml;ck zum Inhaltsverzeichnis</strong></a></p>
 
</body>
 
</html>
/trunk/Quelltext/Language-Eng.ini
0,0 → 1,164
; (De)Coder Language File
 
[Signature]
Language=English
Revision=April 1st, 2007
Translator=Daniel Marschall, Victor Negoescu
Version=4.1 Public Beta 4b
 
[MainForm]
error=Error
information=Information
warning=Warning
openhint=Open file...
folderhint=Open folder...
confighint=Open configuration...
helphint=Help
dechint=Decrypt file...
enchint=Encrypt file...
equal=Equal
notequal=Unequal
opened=Opened:
location=Location:
nofile=No file
hasherror=Filechecksum isn't equal to the internal value. Probably the###file was manipulated or the password is incorrect.
foldermessageopen=Please select the folder, which is to be packed into a ZIP file, in order to be encoded.
foldermessagesave=Where should the encoded folder being moved to?
helpnotfound=The help file could not be found.
passwordsdifferent=The passwords are different!
mkdirerror=Could not create target directory!
status=State:
encrypted=Encrypted with %s
unencrypted=Unencrypted
originalname=Original name:
cryptmode=Mode:
filetype=Filetype:
filesize=Data size:
password=Password:
repassword=Validation:
errorreading=The file could not be read. Probably it is damaged or in a not compatible file version.
broken=Broken
archivecorrupt=The ZIP file is damaged.
moveerror=The output file could not be created. Probably a non-existing folder was supplied.
equalhint=Are the two passwords identical?
entropy=Security of the password, calculated by entropy
securedelete=Delete the sourcefile securily after the process.
capswarning=Warning: Caps Lock is activated!
capslock=Caps Lock!
encodedata=Encrypting data...
decodedata=Decrypting data...
zip_folder=Pack folder as ZIP file
unzip_folder=Unzip tempoary ZIP file
filter_all=All files
filter_encrypted=Encrypted files
deletefile=Safe deletion of source files...
notdeleted=Source files could be deleted only partially or not at all. They are probably provided with a writing protection or are under use.
cleaningerror=The tempoary files could be deleted only partially or not at all. They are probably provided with a writing protection or are under use.
cleaningok=The tempoary files were deleted successfully.
erase=Destroy irrevocablly!
erasewarning=Warning! You are in the process deleting the up-to-date opened file and/or the up-to-date opened file irrevocablly. Since the data are several times overwritten, no re-establishment is more possible. This is useful, if you liked to delete sensitive data of your non removable disk.######Are you surely that you would like to continue?
erasesuccessful=The file and/or the file was successfully destroyed.
drive=Drive
closefile=Close file
delok=The files were successfully deleted.
delerror=The files could be not deleted completely.
fileorfoldernotfound=File and/or folder does not exist.
nothingtoclean=There are no not deleted temporary files at the moment.
exit=Exit
actions=Actions
help=Help
file=File
about=About...
direct=Open file directly
x-file=%s-File
x-byte-seed=%d Byte Seed
compressed=Compressed
update_error=An error arosed. Probably you are not connected to the internet, or the ViaThinkSoft server is temporarly offline.
update_no=There are no updates available.
update_yes=A new version of this software is available. Do you want to download it?
updates=Check for updates...
compress=Compress data
dateiensammlung=File collection
wait_internet=Checking for newer version...
dateisammlung_folder_add_message=Btte select you the folder, which is to be added to the file collection.
dateiensammlung_neu=Create new
dateiensammlung_add_file=Add file(s)...
dateiensammlung_add_folder=Add folder...
dateiensammlung_show=Show objects...
web_email=Contact project leader
web_keytransmitter=Secure key transmission (in German)
web_ressources=Web-Resources
web_dm=Daniel Marschall's web portal (in German)
web_vts=ViaThinkSoft (in German)
web_project=(De)Coder project page (in German)
web_infopages=
web_forum=
 
[ConfigForm]
information=Information
caption=Configuration
operatingsystem=Integration into the operating system
confinfo1=Here you can affect the integration of (De)Coder into the operating system.###For this you need administrator rights.
confinfo2=Encoded files and folders get the file extension DC4.
confinfo3=Files and folders get the context menu entry "Open with (De)Coder".
confinfo4=Files and folders get the context menu entry "Destroy with (De)Coder".
confinfo5=Integrate secure-move into the Windows-Shell.
restartinfo=Please note that Windows notices made changes possibly late. You should###restart your computer after the changes, so that they become effective.
close=Close
dc4file=(De)Coder %s File
keycapt=
keyinfo=
bytes=Bytes
 
[Activator]
error=Error
failed=An error aroused. Probably you have no administrator rights or the installation is broken.
 
[ShlExt]
openwith=Open object with (De)Coder
multiplefiles=You selected several files and/or folders. For each element a new window of (De)Coder will be opened. Would you really like to continue the operation?
multiplecaption=Open multiple files
codermissing=Could not find (De)Coder. A reinstallation should solve this problem.
error=Error
context=Open with (De)Coder
 
[ShlErase]
sicherheitsfrage=Destroy object with (De)Coder
sicherheitsfragecaption=Would you like to destroy these objects really irrevocablly?
codermissing=Safety inquiry
error=Could not find (De)Coder. A reinstallation should solve this problem.
context=Error
information=Destroy with (De)Coder
delok=Information
delerror=The files were deleted successfully.
=The files could be not deleted completely.
 
[SecureMove]
title=&Secure Move
description=Shifts the file, without leaving data remaining on the data medium.
error_del=Error! The source object "%s" could be not completely destroyed after copying.
error_copy=Error! The directory "%s" could not be copied to the destination "%s". Windows returned the error code "%d"
wait=Please wait...
 
[AboutForm]
about=About...
installedlang=Installed language
leader=Project leader: %s
version=Version %s
copyright=© Copyright %d - %d %s. All rights reserved!
lang=Autor:
translator=Translator:
revision=Revision:
ok=OK
 
[WartenForm]
wait=Please wait...
exit=Exit
 
[ElementeForm]
close=Close
remove=Remove
caption=Elements of the file-collection
add_file=Add file(s)...
add_folder=Add a folder...
 
/trunk/Quelltext/Language-Fr.ini
0,0 → 1,164
; (De)Coder Language File
 
[Signature]
Language=Français
Revision=1 avril 2007
Translator=Daniel Marschall, Andrea Zelenka
Version=4.1 Public Beta 4b
 
[MainForm]
error=Erreur
information=Avertissement
warning=Informations
openhint=Ouvrir le fichier...
folderhint=Ouvrir le dossier...
confighint=Ouvrir la configuration...
helphint=L'aide
dechint=Décoder le fichier...
enchint=Coder le fichier...
equal=Égal
notequal=Différent
opened=Ouvert:
location=Localité:
nofile=Aucun fichier
hasherror=La somme de contrôle du fichier ne correspond pas à l'entrée interne. Le fichier a###probablement été manipulé ou le mot de passe n'est pas correct.
foldermessageopen=Veuillez choisir le dossier qui doit être emballé dans un fichier ZIP pour être codé.
foldermessagesave=Où le dossier décodé, doit-il être déplacé?
helpnotfound=Le fichier d'aide n'a pas été trouvé.
passwordsdifferent=Les deux mots de passe sont différents!
mkdirerror=Le repertoire objectif ne pouvait pas être établi!
status=Statut:
encrypted=Codé avec %s
unencrypted=Non codé
originalname=Nom original:
cryptmode=Mode:
filetype=Type de fichier:
filesize=
password=Mot de passe:
repassword=Confirmation:
errorreading=Le fichier ne pouvait pas être entré par lecture directe. Elle est probablement endommagée ou dans une version de fichier non compatible.
broken=Endommagé
archivecorrupt=Le fichier ZIP, dans le quel se trouve contenu du dossier est endommagé.
moveerror=Le fichier de sortie ne pouvait pas être fourni. Un fichier non existant a probablement été indiqué.
equalhint=Annonce, si les deux mots de passe sont identiques
entropy=Sécurité du mot de passe, calculé par une entropie
securedelete=Supprimer sûrement des fichier(s) après codage/décodage
capswarning=Avertissement: La touche de blocage est activée!
capslock=La touche de blocage!
encodedata=Coder les données...
decodedata=Décoder les données...
zip_folder=Emballer le dossier comme fichier ZIP
unzip_folder=Déballer des fichiers ZIP tempoaires
filter_all=Tous les fichiers
filter_encrypted=Fichiers codés
deletefile=Suppression garantie des fichiers de source...
notdeleted=Les fichiers temporaires ne pouvaient qu'en partie ou pas du tout être supprimés. Ils sont probablement fournis avec une protection d'écriture ou sont en train d'être utilisés.
cleaningerror=Les fichiers temporaires ne pouvaient qu'en partie ou pas du tout être supprimés. Ils sont probablement fournis avec une protection d'écriture ou sont en train d'être utilisés.
cleaningok=Les fichiers temporaires ont été supprimés avec succès.
erase=Détruire Irrévocablement !
erasewarning=Avertissement! Ils sont sur le point de supprimer irrévocablement le fichier ouvert actuellement et/ou le fichier ouvert actuellement. Puisque les données sont recouvertes plusieurs fois, aucun rétablissement n'est plus possible. Cela est utile, si vous vouliez supprimer des données sensibles de votre disque dur.######Êtes vous sûrement que vous voudriez continuer?
erasesuccessful=Le fichier et/ou le fichier a été détruit avec succès.
drive=Lecteur
closefile=Fermer fichier
delok=Les fichiers ont été supprimés avec succès.
delerror=Les fichiers ne pouvaient pas être supprimés complètement.
fileorfoldernotfound=Le fichier et/ou le fichier n'existe pas.
nothingtoclean=Il n'y a pas actuellement de fichiers temporaires non supprimés.
exit=Terminier
actions=Actions
help=Aide
file=Fichier
about=
direct=
x-file=
x-byte-seed=%d Byte Seed
compressed=Comprimé
update_error=
update_no=
update_yes=
updates=Examiner une mise à jour de logiciel...
compress=
dateiensammlung=
wait_internet=
dateisammlung_folder_add_message=
dateiensammlung_neu=
dateiensammlung_add_file=
dateiensammlung_add_folder=
dateiensammlung_show=
web_email=
web_keytransmitter=
web_ressources=
web_dm=
web_vts=
web_project=
web_infopages=
web_forum=
 
[ConfigForm]
information=Informations
caption=Configuration
operatingsystem=Fusion dans le système d'exploitation
confinfo1=Ici, la fusion plus (De)Coder dans le système d'exploitation peut être###influencée. Pour cela des droits d'administration sont nécessaires.
confinfo2=Des fichiers et dossiers codés ont l'élargissement de fichier DC4.
confinfo3=Des fichiers et des dossiers ont l'entrée de menu de contexte###"Ouvrir avec plus (De)Coder".
confinfo4=Des fichiers et des fichiers ont l'entrée de menu de contexte "Détruire avec plus (De)Coder".
confinfo5=Des objets peuvent garantie être décalés sur celui coquille Windows.
restartinfo=Veuillez considérer que Windows remarque les modifications peut-être trop tard.###Vous devriez remettre en marche l'ordinateur d'après les modifications, de sorte###que les modifications deviennent efficaces.
close=Fermeture
dc4file=Fichier de (De)Coder %s
keycapt=
keyinfo=
bytes=Bytes
 
[Activator]
error=Erreur
failed=
 
[ShlExt]
openwith=Ouvrir l'objet avec plus (De)Coder
multiplefiles=Vous avez choisi plusieurs fichiers ou dossiers. Pour chaque élément, une nouvelle fenêtre de (De)Coder s'ouvrira. voulez-vous continuer le processus vraiment?
multiplecaption=Ouvrir plusieurs fichiers
codermissing=Ne pouvait pas trouver (De)Coder. Une nouvelle installation de l'application pourrait réparer le problème.
error=Erreur
context=Ouvrir avec plus (De)Coder
 
[ShlErase]
sicherheitsfrage=L'objet détruire avec (De)Coder
sicherheitsfragecaption=Voudriez-vous détruire vraiment irrévocablement ces objets?
codermissing=Interrogation de sécurité
error=Ne pouvait pas plus (De)Coder trouver. Une nouvelle installation de l'application pourrait réparer le problème.
context=Erreur
information=Détruire avec (De)Coder
delok=Avertissement
delerror=Les fichiers ont été supprimés avec succès.
=Les fichiers ne pouvaient pas être supprimés complètement.
 
[SecureMove]
title=Décaler &sûrement
description=Décale le fichier, sans laisser des données sur le support de données autres.
error_del=
error_copy=
wait=Attendre, s'il vous plaît...
 
[AboutForm]
about=
installedlang=Langue installationne
leader=Chef de projet: %s
version=Version %s
copyright=© Copyright %d - %d %s. Tous les droits réserver!
lang=Auteur:
translator=Traducteur:
revision=Révision:
ok=D'accord
 
[WartenForm]
wait=Attendre, s'il vous plaît...
exit=Terminer
 
[ElementeForm]
close=Fermeture
remove=
caption=Elements de collection des fichiers
add_file=
add_folder=
 
/trunk/Quelltext/Language.ini
0,0 → 1,163
; (De)Coder Language File
 
[Signature]
Language=Deutsch
Revision=1. April 2007
Translator=Daniel Marschall
Version=4.1 Public Beta 4b
 
[MainForm]
error=Fehler
information=Information
warning=Warnung
openhint=Datei(en) öffnen...
folderhint=Ordner öffnen...
confighint=Konfiguration aufrufen...
helphint=Hilfe aufrufen
dechint=Datei entschlüsseln...
enchint=Datei verschlüsseln...
equal=Gleich
notequal=Ungleich
opened=Geöffnet:
location=Ort:
nofile=Keine Datei
hasherror=Dateiprüfsumme stimmt nicht mit dem internen Eintrag überein.###Wahrscheinlich wurde die Datei manipuliert oder das Passwort ist inkorrekt.
foldermessageopen=Bitte wählen Sie den Ordner aus, der in eine ZIP-Datei gepackt werden soll, um verschlüsselt zu werden.
foldermessagesave=Wohin soll der Ordner, der entschlüsselt wird, verschoben werden?
helpnotfound=Die Hilfedatei wurde nicht gefunden.
passwordsdifferent=Die beiden Passwörter sind unterschiedlich!
mkdirerror=Zielverzeichnis konnte nicht angelegt werden!
status=Status:
encrypted=Verschlüsselt mit %s
unencrypted=Unverschlüsselt
originalname=Originaler Name:
cryptmode=Modus:
filetype=Dateityp:
filesize=Datenmenge:
password=Passwort:
repassword=Bestätigung:
errorreading=Die Datei konnte nicht eingelesen werden. Wahrscheinlich###ist sie beschädigt oder in einer nicht kompatiblen Dateiversion.
broken=Beschädigt
archivecorrupt=Die ZIP-Datei, in der sich die Ordnerinhalte befinden, ist beschädigt.
moveerror=Die Ausgabedatei konnte nicht erstellt werden. Wahrscheinlich wurde ein nicht existierender Ordner angegeben.
equalhint=Anzeige, ob beide Passwörter gleich sind
entropy=Sicherheit des Passwortes, errechnet durch Entropie
securedelete=Quelldatei(en) nach der Ver-/Entschlüsselung sicher löschen (außer beim direkten Öffnen)
capswarning=Warnung: Feststelltaste ist aktiviert!
capslock=Feststelltaste!
encodedata=Verschlüsseln der Daten...
decodedata=Entschlüsseln der Daten...
zip_folder=Ordner als ZIP-Datei packen
unzip_folder=Temporäre ZIP-Datei entpacken
filter_all=Alle Dateien
filter_encrypted=Verschlüsselte Dateien
deletefile=Sicheres Löschen der Quelldateien...
notdeleted=Die Quelldateien konnten nur zum Teil oder gar nicht gelöscht werden. Sie sind wahrscheinlich mit einem Schreibschutz versehen oder sind gerade unter Benutzung.
cleaningerror=Die temporären Dateien konnten nur zum Teil oder gar nicht gelöscht werden. Sie sind wahrscheinlich mit einem Schreibschutz versehen oder sind gerade unter Benutzung.
cleaningok=Die temporären Dateien wurden erfolgreich gelöscht.
erase=Unwiderruflich vernichten!
erasewarning=Warnung! Sie sind im Begriff, die aktuell geöffnete Datei bzw. den aktuell geöffneten Ordner unwiderruflich zu löschen. Da die Daten mehrmals überschrieben werden, ist keine Wiederherstellung mehr möglich. Dies ist nützlich, wenn Sie sensible Daten von Ihrer Festplatte löschen möchten.######Sind Sie sicher, dass Sie fortfahren möchten?
erasesuccessful=Die Datei bzw. der Ordner wurde erfolgreich vernichtet.
drive=Laufwerk
closefile=Datei schließen
delok=Die Dateien wurden erfolgreich gelöscht.
delerror=Die Dateien konnten nicht vollständig gelöscht werden.
fileorfoldernotfound=Datei bzw. Ordner existiert nicht.
nothingtoclean=Es gibt derzeit keine nicht gelöschten temporären Dateien.
exit=Beenden
actions=Aktionen
help=Hilfe
file=Datei
about=Über...
direct=Datei direkt öffnen
x-file=%s-Datei
x-byte-seed=%d Byte Seed
compressed=Komprimiert
update_error=Ein Fehler ist aufgetreten. Wahrscheinlich ist keine Internetverbindung aufgebaut, oder der der ViaThinkSoft-Server temporär offline.
update_no=Es ist keine neue Programmversion vorhanden.
update_yes=Eine neue Programmversion ist vorhanden. Möchten Sie diese jetzt herunterladen?
updates=Softwareaktualisierung prüfen...
compress=Daten komprimieren
dateiensammlung=Dateiensammlung
wait_internet=Rufe Internetinformationen ab...
dateisammlung_folder_add_message=Btte wählen Sie den Ordner aus, der zu der Dateisammlung hinzugefügt werden soll.
dateiensammlung_neu=Neue erstellen
dateiensammlung_add_file=Datei(en) hinzufügen...
dateiensammlung_add_folder=Ordner hinzufügen...
dateiensammlung_show=Elemente anzeigen...
web_email=Projektleiter kontaktieren
web_keytransmitter=Sichere Schlüsselübermittlung
web_ressources=Ressourcen im Web
web_dm=Daniel Marschall's Webportal
web_vts=ViaThinkSoft
web_project=(De)Coder Projektseite
web_infopages=(De)Coder InfoPages
web_forum=(De)Coder Forum im DevBoard
 
[ConfigForm]
information=Information
caption=Konfiguration
operatingsystem=Einbindung in das Betriebssystem
confinfo1=Hier kann die Einbindung von (De)Coder in das Betriebssystem beeinflusst werden.###Hierzu werden Administrationsrechte benötigt.
confinfo2=Verschlüsselte Dateien und Ordner haben die Dateierweiterung DC4.
confinfo3=Dateien und Ordner haben den Kontextmenüeintrag "Mit (De)Coder öffnen".
confinfo4=Dateien und Ordner haben den Kontextmenüeintrag "Mit (De)Coder vernichten".
confinfo5=Objekte können über die Windows-Shell sicher verschoben werden.
restartinfo=Bitte beachten Sie, dass Windows die Änderungen möglicherweise verspätet bemerkt.###Sie sollten den Computer nach den Änderungen neu starten, sodass die Änderungen###wirksam werden.
close=Schließen
dc4file=(De)Coder %s Datei
keycapt=Maximale Keyloggerschutzbytes
keyinfo=Legt fest, wie viele Bytes Datenmüll maximal pro Tastendruck innerhalb eines Passwortfeldes###gesendet werden dürfen. Der Schutz ist deaktiviert, wenn der Wert 0 eingegeben wird.###Je höher der Wert ist, desto mehr wird der PC bei der Passworteingabe ausgelastet,###was zur Folge haben kann, dass Tastendrücke verloren gehen können. Standardwert: %d Bytes.
bytes=Bytes
 
[Activator]
error=Fehler
failed=Ein Fehler ist aufgetreten. Wahrscheinlich verfügen Sie nicht über###Administratorrechte an diesem System oder die Installation ist beschädigt.
 
[ShlExt]
openwith=Objekt mit (De)Coder öffnen
multiplefiles=Sie haben mehrere Dateien oder Ordner ausgewählt. Für jedes Element wird sich ein neues Fenster von (De)Coder öffnen. Möchten Sie den Vorgang wirklich fortsetzen?
multiplecaption=Öffnen mehrerer Dateien
codermissing=Konnte (De)Coder nicht finden. Eine Neuinstallation der Anwendung könnte das Problem beheben.
error=Fehler
context=Mit (De)Coder öffnen
 
[ShlErase]
sicherheitsfrage=Möchten Sie diese Objekte wirklich unwiderruflich vernichten?
sicherheitsfragecaption=Sicherheitsabfrage
codermissing=Konnte (De)Coder nicht finden. Eine Neuinstallation der Anwendung könnte das Problem beheben.
error=Fehler
context=Mit (De)Coder vernichten
information=Information
delok=Die Dateien wurden erfolgreich gelöscht.
delerror=Die Dateien konnten nicht vollständig gelöscht werden.
 
[SecureMove]
title=&Sicheres Verschieben
description=Verschiebt die Datei, ohne Daten auf dem Datenträger übrig zu lassen.
error_del=Fehler! Das Quellobjekt "%s" konnte nach dem Kopieren nicht vollständig vernichtet werden.
error_copy=Fehler! Das Verzeichnis "%s" konnte nicht an den Zielort "%s" kopiert werden. Windows gab den Fehlercode "%d" zurück
wait=Bitte warten...
 
[AboutForm]
about=Über...
installedlang=Installierte Sprache
leader=Projektleiter: %s
version=Version %s
copyright=© Copyright %d - %d %s. Alle Rechte vorbehalten!
lang=Sprache:
translator=Übersetzer:
revision=Revision:
ok=OK
 
[WartenForm]
wait=Bitte warten...
exit=Beenden
 
[ElementeForm]
close=Schließen
remove=Entfernen
caption=Elemente der Dateisammlung
add_file=Datei(en) hinzufügen...
add_folder=Ordner hinzufügen...
 
/trunk/Quelltext/Main.dfm
0,0 → 1,1489
object MainForm: TMainForm
Left = 353
Top = 279
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = '#'
ClientHeight = 298
ClientWidth = 492
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = mainmenu
OldCreateOrder = False
Position = poDesktopCenter
OnClose = form_close
OnCloseQuery = form_closequery
OnCreate = form_create
OnShow = form_show
PixelsPerInch = 96
TextHeight = 13
object img_type: TImage
Left = 8
Top = 16
Width = 32
Height = 32
Transparent = True
end
object lbl_vle5: TLabel
Left = 56
Top = 80
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_vle6: TLabel
Left = 56
Top = 96
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_vle3: TLabel
Left = 56
Top = 48
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_vle4: TLabel
Left = 56
Top = 64
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_passwort: TLabel
Left = 8
Top = 155
Width = 7
Height = 13
Caption = '#'
Visible = False
end
object lbl_passwort2: TLabel
Left = 8
Top = 179
Width = 7
Height = 13
Caption = '#'
Visible = False
end
object img_warning: TImage
Left = 8
Top = 265
Width = 16
Height = 16
Cursor = crHelp
ParentShowHint = False
ShowHint = True
Transparent = True
Visible = False
end
object lbl_capswarning: TLabel
Left = 32
Top = 267
Width = 7
Height = 13
Cursor = crHelp
Caption = '#'
ParentShowHint = False
ShowHint = True
Transparent = True
Visible = False
end
object lbl_entropy: TLabel
Left = 344
Top = 155
Width = 9
Height = 13
Cursor = crHelp
Caption = '#'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
ParentShowHint = False
ShowHint = True
Transparent = True
Visible = False
end
object lbl_equal: TLabel
Left = 344
Top = 179
Width = 9
Height = 13
Cursor = crHelp
Caption = '#'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
ParentShowHint = False
ShowHint = True
Transparent = True
Visible = False
end
object lbl_vle2: TLabel
Left = 56
Top = 32
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_vle1: TLabel
Left = 56
Top = 16
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object img_error: TImage
Left = 16
Top = 145
Width = 16
Height = 16
ParentShowHint = False
ShowHint = False
Transparent = True
Visible = False
end
object lbl_readerror: TLabel
Left = 40
Top = 147
Width = 7
Height = 13
Caption = '#'
ParentShowHint = False
ShowHint = False
Transparent = True
Visible = False
end
object lbl_vle7: TLabel
Left = 56
Top = 112
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object edt_passwort: TEdit
Left = 88
Top = 152
Width = 249
Height = 21
PasswordChar = '*'
TabOrder = 0
Visible = False
OnChange = edt_passwort_change
OnEnter = edt_passwort_enter
OnKeyPress = edt_passwort_keypress
end
object edt_passwort2: TEdit
Left = 88
Top = 176
Width = 249
Height = 21
PasswordChar = '*'
TabOrder = 1
Visible = False
OnChange = edt_password2_change
OnEnter = edt_passwort_enter
OnKeyPress = edt_passwort2_keypress
end
object chk_securedelete: TCheckBox
Left = 8
Top = 224
Width = 473
Height = 17
Caption = '#'
Enabled = False
TabOrder = 3
Visible = False
end
object edt_vle1: TEdit
Left = 144
Top = 16
Width = 337
Height = 21
TabStop = False
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsNone
Color = clBtnFace
ReadOnly = True
TabOrder = 9
Text = '-'
end
object edt_vle2: TEdit
Left = 144
Top = 32
Width = 337
Height = 21
TabStop = False
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsNone
ParentColor = True
ReadOnly = True
TabOrder = 10
Text = '-'
end
object edt_vle3: TEdit
Left = 144
Top = 48
Width = 337
Height = 21
TabStop = False
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsNone
ParentColor = True
ReadOnly = True
TabOrder = 11
Text = '-'
end
object edt_vle4: TEdit
Left = 144
Top = 64
Width = 337
Height = 21
TabStop = False
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsNone
ParentColor = True
ReadOnly = True
TabOrder = 12
Text = '-'
end
object edt_vle5: TEdit
Left = 144
Top = 80
Width = 337
Height = 21
TabStop = False
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsNone
ParentColor = True
ReadOnly = True
TabOrder = 13
Text = '-'
end
object edt_vle6: TEdit
Left = 144
Top = 96
Width = 337
Height = 21
TabStop = False
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsNone
ParentColor = True
ReadOnly = True
TabOrder = 14
Text = '-'
end
object edt_vle7: TEdit
Left = 144
Top = 112
Width = 337
Height = 21
TabStop = False
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsNone
ParentColor = True
ReadOnly = True
TabOrder = 15
Text = '-'
end
object b_encrypt: TBitBtn
Left = 304
Top = 256
Width = 169
Height = 25
Caption = '#'
TabOrder = 8
Visible = False
OnClick = m_encrypt_execute
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
04000000000080000000120B0000120B00001000000000000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333000003
3333333300888880033333307787078770333308888707888803330777880887
7703330888800088880333077770007777033308888888888803333000000000
0033333308033308033333330803330803333333080333080333333377800087
7333333330888880333333333300000333333333333333333333}
end
object b_decrypt: TBitBtn
Left = 304
Top = 256
Width = 169
Height = 25
Caption = '#'
TabOrder = 7
Visible = False
OnClick = m_decrypt_execute
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
04000000000080000000120B0000120B00001000000000000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333000003
3333333300888880033333307787078770333308888707888803330777880887
770333088880008888033307777000777703B3088888888888033B3000000000
003333BBBB3333080333BBBB707BB308033333BB0803330803333B3B08033308
0333B33B778000877333333B308888803333333B330000033333}
end
object b_direct: TBitBtn
Left = 128
Top = 256
Width = 169
Height = 25
Caption = '#'
TabOrder = 6
Visible = False
OnClick = m_direct_execute
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00FF000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000000000000000000000000000000000000000
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000848400008484000000000000000000000000000000
0000C6C6C600000000000084840000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000848400008484000000000000000000000000000000
0000C6C6C600000000000084840000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000848400008484000000000000000000000000000000
000000000000000000000084840000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000848400008484000084840000848400008484000084
840000848400008484000084840000000000FF00FF00FF00FF00000000000000
0000FF00FF000000000000848400008484000000000000000000000000000000
000000000000008484000084840000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6
C600C6C6C600000000000084840000000000FF00FF0000000000FF00FF00FF00
FF00FF00FF00000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6
C600C6C6C600000000000084840000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6
C600C6C6C600000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000000084840000000000C6C6C600C6C6C600C6C6C600C6C6
C600C6C6C60000000000C6C6C60000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00FF0000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000}
end
object b_open: TBitBtn
Left = 129
Top = 256
Width = 169
Height = 25
Caption = '#'
TabOrder = 4
OnClick = m_open_execute
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
04000000000080000000130B0000130B00001000000000000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0033333333B333
333B3BB3777BB7777BB333B0000000000B333330FFFFFFFF07333330FFFFFFFF
07333330F00F000F07333330FFFFFFFF0733BBB0F0000F0F0BB33BB0FFFFFFFF
0BBB3330F00F000003333330FFFF0FF033333330F08F0F0B33333330FFFF003B
B33333B000000333BB333BB3333BB3333BB3B333333B3333333B}
end
object b_folder: TBitBtn
Left = 304
Top = 256
Width = 169
Height = 25
Caption = '#'
TabOrder = 5
OnClick = m_folder_execute
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
0000008484000084840000848400008484000084840000848400008484000084
84000084840000000000FF00FF00FF00FF00FF00FF00FF00FF000000000000FF
FF00000000000084840000848400008484000084840000848400008484000084
8400008484000084840000000000FF00FF00FF00FF00FF00FF0000000000FFFF
FF0000FFFF000000000000848400008484000084840000848400008484000084
840000848400008484000084840000000000FF00FF00FF00FF000000000000FF
FF00FFFFFF0000FFFF0000000000008484000084840000848400008484000084
84000084840000848400008484000084840000000000FF00FF0000000000FFFF
FF0000FFFF00FFFFFF0000FFFF00000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000FF
FF00FFFFFF0000FFFF0000000000000000000000000000000000000000000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00000000000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00
FF00FF00FF00FF00FF0000000000FF00FF0000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
end
object chk_compress: TCheckBox
Left = 8
Top = 208
Width = 473
Height = 17
Caption = '#'
Checked = True
State = cbChecked
TabOrder = 2
Visible = False
end
object dlg_open: TOpenDialog
Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing]
Left = 392
Top = 176
end
object dlg_save_dec: TSaveDialog
Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]
Left = 424
Top = 176
end
object dlg_save_enc: TSaveDialog
DefaultExt = '.dc4'
Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]
Left = 456
Top = 176
end
object tmr_capslock: TTimer
Enabled = False
Interval = 10
OnTimer = tmr_capslock_timer
Left = 424
Top = 144
end
object imagelist: TImageList
Left = 456
Top = 144
Bitmap = {
494C010113001800040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000006000000001002000000000000060
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000FFFF0000000000000000000000
000000000000000000000000000000FFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000FFFF0000FFFF000000
00007F7F7F007F7F7F007F7F7F0000FFFF0000FFFF007F7F7F007F7F7F007F7F
7F007F7F7F0000FFFF0000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000FFFF000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000FFFF0000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00000000007F7F7F0000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
0000000000000000FF0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00000000007F7F7F0000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF000000000000000000FFFFFF000000
00000000000000000000FFFFFF00000000000000000000000000000000000000
0000000000000000FF000000FF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00000000007F7F7F0000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00000000007F7F7F0000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF0000000000BFBFBF00000000000000
0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF0000000000008484000084
8400000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000FFFF0000FFFF0000FFFF000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF000000000000FFFF0000FFFF00000000000000000000000000000000000000
00000000FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000000000848400008484000084
8400008484000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000FFFF0000FFFF000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF000000000000FFFF0000FFFF0000FFFF000000000000000000000000000000
00000000FF000000FF0000000000FFFFFF000000000000000000FFFFFF000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000FF000000FF00000000000084840000848400008484000084
8400008484000084840000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
0000000000000000000000000000000000000000FF000000FF000000FF000000
FF000000FF000000FF000000FF0000000000FFFFFF00FFFFFF00FFFFFF000000
0000FFFFFF00FFFFFF000000000000000000000000000000000000000000FFFF
FF00000000000000FF0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF000000
0000000000000000000000000000000000000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF0000000000BFBFBF00FFFFFF000000
0000FFFFFF0000000000000000000000000000000000000000000000000000FF
FF000000000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF000000000000FF
FF00000000000000000000000000000000000000FF000000FF000000FF000000
FF000000FF000000FF000000FF0000000000FFFFFF00FFFFFF00FFFFFF000000
000000000000000000000000000000000000000000000000000000000000FFFF
FF0000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000000000FF
FF0000FFFF000000000000000000000000000000000000000000000000000000
00000000FF000000FF0000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000FF
FF00FFFFFF0000FFFF0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000FFFF000000
0000000000000000000000000000000000000000000000000000000000000000
000000FFFF0000FFFF0000000000000000000000000000000000000000000000
00000000FF000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000FFFF0000FFFF000000
000000000000000000000000000000FFFF0000FFFF0000000000000000000000
00000000000000FFFF0000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000FFFF0000000000000000000000
000000000000000000000000000000FFFF000000000000000000000000000000
000000000000000000000000000000FFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
00000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000007F7F7F0000FFFF007F7F
7F00000000000000000000000000FFFFFF000000000000000000FFFFFF000000
000000000000FFFFFF0000000000000000000000000000000000000000000000
00007F7F7F007F7F7F00BFBFBF007F7F7F00000000007F7F7F00BFBFBF007F7F
7F007F7F7F000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000FFFF000080800000FFFF000000000000000000FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000FFFF0000FFFF0000FF
FF00000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF000000000000000000000000000000000000000000BFBF
BF00BFBFBF00BFBFBF00BFBFBF007F7F7F00000000007F7F7F00BFBFBF00BFBF
BF00BFBFBF00BFBFBF0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000080800000FFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF
FF00FFFFFF007F7F7F007F7F7F007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0000000000000000007F7F7F0000FFFF007F7F
7F00000000000000000000000000FFFFFF000000000000000000000000000000
0000FFFFFF00FFFFFF0000000000000000000000000000000000000000007F7F
7F007F7F7F007F7F7F00BFBFBF00BFBFBF0000000000BFBFBF00BFBFBF007F7F
7F007F7F7F007F7F7F0000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000FFFF000080
800000FFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF000000000000000000000000000000000000000000BFBF
BF00BFBFBF00BFBFBF00BFBFBF00000000000000000000000000BFBFBF00BFBF
BF00BFBFBF00BFBFBF0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000FFFF000080800000FF
FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
FF00FFFFFF007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
0000000000000000000000000000FFFFFF000000000000000000FFFFFF000000
0000000000000000000000000000000000000000000000000000000000007F7F
7F007F7F7F007F7F7F007F7F7F000000000000000000000000007F7F7F007F7F
7F007F7F7F007F7F7F000000000000000000000000007F7F7F00000000000000
000000000000000000000000000000000000000000000080800000FFFF000000
00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF000000FF000000FF000000FF00000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
0000FFFFFF00FFFFFF00000000000000000000FFFF000000000000000000BFBF
BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF
BF00BFBFBF00BFBFBF0000000000000000007F7F7F000000000000FFFF0000FF
FF0000FFFF00000000000000000000FFFF000080800000FFFF00000000000000
00000000000000000000000000000000000000000000FFFFFF007F7F7F007F7F
7F007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF000000FF00FF00000000FF0000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF0000000000BFBFBF00FFFFFF000000
0000FFFFFF000000000000000000000000000000000000FFFF00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000FFFF0000FFFF0000FF
FF0000FFFF0000FFFF0000FFFF000080800000FFFF0000000000000000000000
00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF000000FF0000FF00000000FF0000000000000000000000FF000000FF000000
FF00000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
000000000000000000000000000000000000000000000000000000FFFF0000FF
FF0000FFFF0000FFFF000000000000000000000000000000000000000000BFBF
BF00000000000000000000000000000000000000000000FFFF0000FFFF0000FF
FF0000FFFF0000FFFF0000FFFF0000FFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000FF000000FF000000
FF00000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000FFFF0000FFFF0000FFFF0000FF
FF007F7F7F00000000007F7F7F0000FFFF0000FFFF000000000000000000BFBF
BF00000000000000000000000000000000000000000000FFFF0000FFFF000000
0000000000000080800000FFFF0000FFFF00000000007F7F7F00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000FF000000FF000000
FF00000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000FFFF0000FF
FF0000000000BFBFBF000000000000000000000000000000000000000000BFBF
BF00000000000000000000000000000000007F7F7F007F7F7F0000FFFF000000
0000000000000080800000FFFF0000FFFF0000FFFF0000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000FFFF000000000000FF
FF0000000000BFBFBF000000000000000000000000000000000000000000BFBF
BF0000000000000000000000000000000000000000000000000000FFFF0000FF
FF00008080000080800000FFFF0000FFFF0000FFFF0000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000FF000000FF000000FF00
00000000000000000000000000000000000000FFFF00000000000000000000FF
FF007F7F7F007F7F7F00BFBFBF00000000000000000000000000BFBFBF007F7F
7F007F7F7F000000000000000000000000000000000000000000000000007F7F
7F0000FFFF0000FFFF0000FFFF0000FFFF00000000007F7F7F00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FF0000000000
00000000000000000000000000000000000000000000000000000000000000FF
FF000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000
0000000000000000000000000000000000000000000000000000000000007F7F
7F00000000000000000000000000000000007F7F7F0000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000FF
FF00000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000007F7F7F00000000007F7F
7F007F7F7F007F7F7F0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000FF000000FF000000FF000000FF000000FF000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000BFBFBF007F7F7F00000000007F7F
7F00000000000000000000000000000000000000000000000000000000007F7F
7F00000000007F7F7F0000000000000000000000000000000000000000000000
00000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000
000000000000000000000000000000000000FF000000FF000000FF000000FF00
0000FF000000FF000000BFBFBF0000000000BFBFBF00FF000000FF000000FF00
0000FF000000FF000000FF000000000000000000000000000000000000000000
0000000000008000000080000000FF00000080000000FF000000000000000000
00000000000000000000000000000000000000000000000000007F7F7F007F7F
7F00000000000000000000000000000000000000000000000000000000000000
00007F7F7F000000000000000000000000000000000000000000000000000000
00007F7F7F007F7F7F00BFBFBF007F7F7F00000000007F7F7F00BFBFBF007F7F
7F007F7F7F000000000000000000000000000000000000000000BFBFBF00BFBF
BF00BFBFBF00BFBFBF00000000007F7F7F0000000000BFBFBF00BFBFBF00BFBF
BF00BFBFBF000000000000000000000000000000000000000000000000008000
0000FF000000800000008000000080000000FF00000080000000800000008000
000000000000000000000000000000000000BFBFBF00BFBFBF007F7F7F000000
0000000000007F7F7F0000000000000000000000000000000000000000007F7F
7F0000000000000000007F7F7F007F7F7F00000000000000000000000000BFBF
BF00BFBFBF00BFBFBF00BFBFBF007F7F7F00000000007F7F7F00BFBFBF00BFBF
BF00BFBFBF00BFBFBF00000000000000000000000000FFFFFF00000000007F7F
7F007F7F7F0000000000FFFFFF007F7F7F00FFFFFF00000000007F7F7F007F7F
7F0000000000FFFFFF000000000000000000000000000000000080000000FF00
0000800000000080800000808000800000008000000080000000800000008000
0000800000000000000000000000000000007F7F7F0000000000000000000000
00007F7F7F000000000000000000000000000000000000000000000000000000
0000000000007F7F7F007F7F7F00000000000000000000000000000000007F7F
7F007F7F7F007F7F7F00BFBFBF00BFBFBF0000000000BFBFBF00BFBFBF007F7F
7F007F7F7F007F7F7F0000000000000000007F7F7F0000000000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00000000007F7F7F00000000000000000080000000FF0000008000
0000FF000000008080000080800080000000FF00000080000000FF0000008000
0000008080000080800000000000000000007F7F7F0000000000000000007F7F
7F00000000007F7F7F0000000000000000000000000000000000000000000000
000000000000BFBFBF00000000007F7F7F00000000000000000000000000BFBF
BF00BFBFBF00BFBFBF00BFBFBF00000000000000000000000000BFBFBF00BFBF
BF00BFBFBF00BFBFBF0000000000000000007F7F7F0000000000FFFFFF00FFFF
FF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FFFF00FFFFFF00FFFF
FF00FFFFFF00000000007F7F7F00000000000000000080000000FF000000FF00
0000FF0000000080800000808000008080008000000080000000800000008000
0000008080000080800000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000007F7F
7F007F7F7F00BFBFBF0000000000BFBFBF000000000000000000000000007F7F
7F007F7F7F007F7F7F007F7F7F000000000000000000000000007F7F7F007F7F
7F007F7F7F007F7F7F0000000000000000000000000000000000FFFFFF00FFFF
FF0000FFFF00FFFFFF000000FF000000FF0000FFFF00FFFFFF0000FFFF00FFFF
FF00FFFFFF00000000000000000000000000FF000000FF000000FF000000FF00
0000FF000000008080000080800000808000FF000000FF000000FF0000008000
0000FF0000008000000080000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000BFBFBF00000000007F7F7F00000000000000000000000000BFBF
BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF
BF00BFBFBF00BFBFBF000000000000000000000000007F7F7F000000000000FF
FF00FFFFFF0000FFFF00FFFFFF007F7F7F00FFFFFF0000FFFF00FFFFFF0000FF
FF00000000007F7F7F00000000000000000080000000FF000000FF0000000080
800000808000008080000080800000808000FF000000FF000000FF0000008000
00008000000080000000FF00000000000000000000007F7F7F00000000000000
00007F7F7F0000000000000000007F7F7F00000000007F7F7F00000000000000
0000000000007F7F7F00BFBFBF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000007F7F7F0000000000FFFF
FF0000FFFF00FFFFFF000000FF00BFBFBF0000FFFF00FFFFFF0000FFFF00FFFF
FF00000000007F7F7F000000000000000000FF00000080000000008080000080
800000808000008080000080800000808000FF00000000808000FF0000008000
0000FF000000FF000000FF000000000000007F7F7F0000000000000000000000
00007F7F7F000000000000000000000000007F7F7F0000000000000000007F7F
7F0000000000000000007F7F7F00BFBFBF000000000000000000000000000000
000000000000BFBFBF000000000000000000000000000000000000000000BFBF
BF00000000000000000000000000000000000000000000FFFF000000000000FF
FF00FFFFFF0000FFFF000000FF000000FF000000000000FFFF00FFFFFF0000FF
FF000000000000000000000000000000000080000000FF000000FF0000000080
800000808000008080000080800000808000008080000080800000808000FF00
000080000000FF000000800000000000000000000000000000007F7F7F007F7F
7F007F7F7F007F7F7F007F7F7F0000000000000000007F7F7F00000000000000
00007F7F7F000000000000000000000000000000000000000000000000000000
000000000000BFBFBF000000000000000000000000000000000000000000BFBF
BF000000000000000000000000000000000000000000FFFFFF0000FFFF000000
0000000000000000000000FFFF000000FF000000FF0000000000000000000000
000000FFFF00000000000000000000000000FF000000FF000000FF0000000080
800000808000FF000000FF00000080000000008080000080800000808000FF00
0000FF00000080000000FF00000000000000000000007F7F7F007F7F7F000000
000000000000000000007F7F7F007F7F7F000000000000000000000000007F7F
7F00000000007F7F7F0000000000000000000000000000000000000000000000
000000000000BFBFBF000000000000000000000000000000000000000000BFBF
BF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FF
FF00FFFFFF0000000000000000000000000000000000FF000000FF000000FF00
0000FF000000FF00000000808000008080000080800000808000008080000080
800080000000FF000000000000000000000000000000BFBFBF00000000007F7F
7F007F7F7F007F7F7F00000000007F7F7F000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00007F7F7F007F7F7F00BFBFBF00000000000000000000000000BFBFBF007F7F
7F007F7F7F0000000000000000000000000000000000FFFFFF0000FFFF00FFFF
FF000000FF000000FF0000FFFF00FFFFFF000000FF000000FF0000FFFF00FFFF
FF0000FFFF000000000000000000000000000000000080000000FF0000000080
8000008080000080800000808000008080000080800000808000008080000080
8000FF000000FF00000000000000000000007F7F7F00BFBFBF0000000000BFBF
BF00000000007F7F7F00000000007F7F7F007F7F7F007F7F7F00000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000
0000000000000000000000000000000000000000000000000000FFFFFF0000FF
FF000000FF000000FF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FF
FF00000000000000000000000000000000000000000000000000008080000080
80000080800000808000FF000000FF00000000808000FF000000008080000080
8000FF00000000000000000000000000000000000000BFBFBF00000000007F7F
7F00BFBFBF007F7F7F00000000007F7F7F000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FFFF
FF0000FFFF000000FF000000FF000000FF000000FF00FFFFFF0000FFFF000000
0000000000000000000000000000000000000000000000000000000000000080
800000808000FF000000FF00000080000000FF00000080000000FF000000FF00
000000000000000000000000000000000000000000007F7F7F00BFBFBF000000
000000000000000000007F7F7F007F7F7F000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000FF00000080000000FF000000FF000000FF000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000FFFF0000000000000000000000
000000000000000000000000000000FFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000FFFF0000000000000000000000
000000000000000000000000000000FFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000FFFF00000000000000
000000000000000000000000000000FFFF0000FFFF0000000000000000000000
0000000000000000000000FFFF00000000000000000000000000000000000000
0000000000000000000000000000FF00000000000000FF000000000000000000
0000000000000000000000000000000000000000000000FFFF0000FFFF000000
00007F7F7F007F7F7F007F7F7F0000FFFF0000FFFF007F7F7F007F7F7F007F7F
7F007F7F7F0000FFFF0000FFFF00000000000000000000000000000000000000
000000000000FFFFFF007F7F7F000000FF007F7F7F00FFFFFF00000000000000
0000000000000000000000000000000000000000000000FFFF0000FFFF000000
000000000000000000000000000000FFFF0000FFFF0000000000000000000000
00000000000000FFFF0000FFFF00000000000000000000000000000000000000
000000000000FF000000FF00000000000000FFFFFF0000000000FF0000000000
000000000000000000000000000000000000000000000000000000FFFF000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000FFFF00000000000000000000000000000000000000000000FF
FF00FFFFFF0000FFFF000000FF000000FF000000FF0000FFFF00FFFFFF0000FF
FF0000000000000000000000000000000000000000000000000000FFFF0000FF
FF007F7F7F007F7F7F007F7F7F0000FFFF0000FFFF007F7F7F007F7F7F007F7F
7F0000FFFF0000FFFF0000000000000000000000000000000000000000000000
0000FF0000000000000000000000FFFFFF0000000000FFFFFF0000000000FF00
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00000000007F7F7F000000000000000000000000000000000000FFFF00FFFF
FF0000FFFF00FFFFFF007F7F7F000000FF007F7F7F00FFFFFF0000FFFF00FFFF
FF0000FFFF000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000FFFF00000000000000000000000000000000000000000000000000FF00
00000000000000000000FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF000000
0000FF0000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00000000007F7F7F0000000000000000000000000000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF000000000000000000000000000000000000000000FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
00000000000000000000000000000000000000000000FF000000FF0000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF
FF0000000000FF00000000000000000000000000000000000000000000000000
0000FFFFFF000000000000000000FFFFFF00000000000000000000000000FFFF
FF00000000007F7F7F00000000000000000000000000FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF000000FF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF000000000000000000000000000000000000000000FFFF
FF000000000000000000FFFFFF00000000000000000000000000FFFFFF000000
000000000000000000000000000000000000FF0000000000000000000000FFFF
FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
0000FFFFFF0000000000FF000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00000000007F7F7F000000000000000000FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF000000FF007F7F7F0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF000000000000FFFF0000FFFF0000000000FFFF
FF00FFFFFF00FFFFFF00BFBFBF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
000000FFFF0000FFFF0000FFFF00000000000000000000000000FFFFFF00FFFF
FF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF0000000000FFFFFF0000000000FF00000000FFFF0000FFFF0000FFFF000000
0000FFFFFF0000000000000000000000000000000000FFFFFF0000000000FFFF
FF000000000000FFFF0000FFFF000000000000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00000000000000000000FFFF0000000000FFFF
FF0000000000BFBFBF007F7F7F00000000000000000000000000000000000000
000000000000000000000000000000FFFF0000000000FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0000000000FFFFFF00000000000000000000FFFF0000FFFF000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF000000000000FFFF0000FFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000000000000000000000000000000000BFBF
BF00BFBFBF00BFBFBF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF000000000000000000000000000000000000000000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
0000FFFFFF000000000000000000FFFFFF000000000000000000000000000000
00000000000000000000000000000000000000FFFF00FFFFFF0000FFFF00FFFF
FF007F7F7F007F7F7F0000FFFF00FFFFFF007F7F7F000000FF000000FF00FFFF
FF0000FFFF00FFFFFF0000FFFF0000000000000000000000000000000000BFBF
BF00000000007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFBF
BF0000000000000000000000000000000000000000000000000000000000FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF
FF00000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF000000
000000000000000000000000000000000000FFFFFF0000FFFF00FFFFFF0000FF
FF000000FF000000FF00FFFFFF0000FFFF007F7F7F000000FF000000FF0000FF
FF00FFFFFF0000FFFF00FFFFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000FFFF000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF0000000000BFBFBF00FFFFFF0000000000FFFFFF000000000000FF
FF000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF
FF000000FF000000FF007F7F7F00FFFFFF007F7F7F000000FF000000FF00FFFF
FF0000FFFF00FFFFFF000000000000000000000000000000000000FFFF0000FF
FF0000000000000000000000000000FFFF0000FFFF0000000000000000000000
000000FFFF0000FFFF0000000000000000000000000000000000000000000000
000000000000FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000000000FF
FF0000FFFF000000000000000000000000000000000000FFFF00FFFFFF0000FF
FF00FFFFFF000000FF000000FF000000FF000000FF000000FF00FFFFFF0000FF
FF00FFFFFF0000FFFF0000000000000000000000000000FFFF0000FFFF000000
000000000000000000000000000000FFFF0000FFFF0000000000000000000000
00000000000000FFFF0000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000FFFF000000
0000000000000000000000000000000000000000000000000000000000000000
000000FFFF0000FFFF000000000000000000000000000000000000FFFF00FFFF
FF0000FFFF00FFFFFF000000FF000000FF000000FF00FFFFFF0000FFFF00FFFF
FF0000FFFF000000000000000000000000000000000000FFFF00000000000000
000000000000000000000000000000FFFF0000FFFF0000000000000000000000
0000000000000000000000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000FFFF0000FFFF000000
000000000000000000000000000000FFFF0000FFFF0000000000000000000000
00000000000000FFFF0000FFFF000000000000000000000000000000000000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF000000000000000000000000000000000000FFFF0000000000000000000000
000000000000000000000000000000FFFF000000000000000000000000000000
000000000000000000000000000000FFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000FFFF0000000000000000000000
000000000000000000000000000000FFFF000000000000000000000000000000
000000000000000000000000000000FFFF000000000000000000000000000000
000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000
0000000000000000000000000000000000008484840084848400848484008484
8400848484008484840084848400848484008484840084848400FFFFFF00C6C6
C60084848400C6C6C600FFFFFF00C6C6C6000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000008484840084848400848484008484
840084848400848484008484840084848400848484008484840084848400FFFF
FF0084848400FFFFFF0084848400848484000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000008400000084000000840000008400
00000000000000000000848484008484840084848400FFFFFF00FFFFFF00FFFF
FF00840000008400000084000000840000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008400
0000FF00000084000000000000000000000084848400FFFFFF00FFFFFF00FFFF
FF00840000000000000000000000000000000000000000000000008484000084
8400008484000084840000848400008484000084840000848400008484000000
0000000000000000000000000000000000000000000000000000000000000000
0000008484000084840000000000000000000000000000000000C6C6C6000000
0000008484000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008400
000084000000FF0000008400000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00840000000000000000000000000000000000000000FFFF00000000000084
8400008484000084840000848400008484000084840000848400008484000084
8400000000000000000000000000000000000000000000000000000000000000
0000008484000084840000000000000000000000000000000000C6C6C6000000
0000008484000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008400
0000FF00000084000000FF00000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF008400000000000000000000000000000000000000FFFFFF0000FFFF000000
0000008484000084840000848400008484000084840000848400008484000084
8400008484000000000000000000000000000000000000000000000000000000
0000008484000084840000000000000000000000000000000000000000000000
0000008484000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008400
000084000000FF0000008400000000000000FFFFFF00FFFF0000FFFFFF00FFFF
0000840000000000000000000000000000000000000000FFFF00FFFFFF0000FF
FF00000000000084840000848400008484000084840000848400008484000084
8400008484000084840000000000000000000000000000000000000000000000
0000008484000084840000848400008484000084840000848400008484000084
8400008484000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008400
0000FF00000084000000FF00000000000000FFFF0000FFFFFF00FFFF0000FFFF
FF008400000000000000000000000000000000000000FFFFFF0000FFFF00FFFF
FF0000FFFF000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000008484000084840000000000000000000000000000000000000000000084
8400008484000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008400
000084000000FF0000008400000000000000FFFFFF00FFFF0000FFFFFF00FFFF
0000840000000000000000000000000000000000000000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000
0000008484000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008400
0000FF00000084000000FF00000000000000FFFF0000FFFFFF00FFFF0000FFFF
FF008400000000000000000000000000000000000000FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000
0000008484000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008400
0000840000008400000084000000840000008400000084000000840000008400
0000840000000000000000000000000000000000000000FFFF00FFFFFF0000FF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000084840000000000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6000000
0000C6C6C6000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000840000008400000084000000840000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000424D3E000000000000003E000000
2800000040000000600000000100010000000000000300000000000000000000
000000000000000000000000FFFFFF0000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000FF7EFFFFFFFF00009001FC00F7FF0000
C003FC00F3FF0000E003FC00F1FF0000E003FC0000FF0000E003EC00000F0000
E003E400000700000001E000000300008000000000010000E0070001C0000000
E00F0003C00F0000E00F0007C00F0000E027000FC00F0000C073E3FFE3FF0000
9E79E7FFFFFF00007EFEEFFFFFFF0000FFF8FFFFFC01FC1FFFF8FFFF8C01F007
FFE000000401E003FFE000000401C001FF8100000401C001FF0300008C01C001
FF070000FC01C001840F0000FC014001001F00000403A003003F00000407C3C7
007F0000040F0047003FFFFF07FFC1C7003FFFFF0603A1C7803FFFFFFF076007
C03FFFFFFF8FE80FE07FFFFFFFDFEC1F81FEFC1FF83FFFFF01E2F0070001F83F
07E0E0030001E00F03E0C0010001C00703F0C0010001800323C0C00100018003
3FC0C00180030001E3C0C001800300012230E003800300010020F1C780070001
0020F1C7800700010062F1C780078003001EF00780078003001FF80FC00FC007
001FFC1FE01FE00F007FFFFFF03FF83FFF7EFFFFFF7EFFFFBE7DFE3F9001F83F
9E79F81FC003E00FC003F40FE003C007C007E007E0038003C00F8003E0038003
C00F4001E003000100010000000100018000000080000001C0038001E0070001
C007C003E00F0001E007E00FE00F8003CE73F07FE02780039E79F8FFC073C007
BE7DFFFF9E79E00F7EFEFFFF7EFEF83F0000FFFFFF7EFFFF0000FFFFBFFFFFFF
0000001FF003EFFDE007000FE003C7FFE0070007E003C3FBE0070003E003E3F7
E0070001E003F1E7E00700002003F8CFE007001FE002FC1FE007001FE003FE3F
E007001FE003FC1FFFFF8FF1E003F8CFF81FFFF9E003E1E7F81FFF75FFFFC3F3
F81FFF8FBF7DC7FDFFFFFFFF7F7EFFFF00000000000000000000000000000000
000000000000}
end
object tmr_refresh: TTimer
Enabled = False
Interval = 100
OnTimer = tmr_refresh_timer
Left = 392
Top = 144
end
object mainmenu: TMainMenu
Images = imagelist
Left = 24
Top = 168
object mm_file: TMenuItem
Caption = 'mm_file'
object m_open: TMenuItem
Caption = 'm_open'
ImageIndex = 6
ShortCut = 16463
OnClick = m_open_execute
end
object m_folder: TMenuItem
Caption = 'm_folder'
ImageIndex = 1
ShortCut = 16454
OnClick = m_folder_execute
end
object seperator1: TMenuItem
Caption = '-'
end
object m_config: TMenuItem
Caption = 'm_config'
ImageIndex = 8
OnClick = m_config_execute
end
object seperator2: TMenuItem
Caption = '-'
end
object m_close: TMenuItem
Caption = 'm_close'
Enabled = False
ImageIndex = 4
OnClick = m_close_execute
end
object m_exit: TMenuItem
Caption = 'm_exit'
ImageIndex = 0
ShortCut = 27
OnClick = m_exit_execute
end
end
object mm_dateiensammlung: TMenuItem
Caption = 'mm_dateiensammlung'
object m_dateiensammlung_neu: TMenuItem
Caption = 'm_dateiensammlung_neu'
ImageIndex = 16
ShortCut = 116
OnClick = m_dateiensammlung_neu_click
end
object seperator3: TMenuItem
Caption = '-'
end
object m_dateiensammlung_add_file: TMenuItem
Caption = 'm_dateiensammlung_add_file'
Enabled = False
ImageIndex = 17
ShortCut = 117
OnClick = m_dateiensammlung_add_file_click
end
object m_dateiensammlung_add_folder: TMenuItem
Caption = 'm_dateiensammlung_add_folder'
Enabled = False
ImageIndex = 18
ShortCut = 118
OnClick = m_dateiensammlung_add_folder_click
end
object seperator4: TMenuItem
Caption = '-'
end
object m_dateiensammlung_show: TMenuItem
Caption = 'm_dateiensammlung_show'
Enabled = False
ImageIndex = 5
ShortCut = 119
OnClick = m_dateiensammlung_show_click
end
end
object mm_actions: TMenuItem
Caption = 'mm_actions'
Visible = False
object m_encrypt: TMenuItem
Caption = 'm_encrypt'
ImageIndex = 9
ShortCut = 16453
OnClick = m_encrypt_execute
end
object m_decrypt: TMenuItem
Caption = 'm_decrypt'
ImageIndex = 15
ShortCut = 16452
OnClick = m_decrypt_execute
end
object m_direct: TMenuItem
Caption = 'm_direct'
ImageIndex = 2
ShortCut = 16450
OnClick = m_direct_execute
end
object seperator5: TMenuItem
Caption = '-'
end
object m_delete: TMenuItem
Caption = 'm_delete'
ImageIndex = 3
ShortCut = 16430
OnClick = m_delete_execute
end
end
object mm_help: TMenuItem
Caption = 'mm_help'
object m_help: TMenuItem
Caption = 'm_help'
ImageIndex = 10
ShortCut = 112
OnClick = m_help_execute
end
object m_web: TMenuItem
Caption = 'm_web'
ImageIndex = 11
object m_web_dm: TMenuItem
Caption = 'm_web_dm'
ImageIndex = 14
OnClick = m_web_dm_click
end
object m_web_vts: TMenuItem
Caption = 'm_web_vts'
ImageIndex = 14
OnClick = m_web_vts_click
end
object m_web_project: TMenuItem
Caption = 'm_web_project'
ImageIndex = 14
OnClick = m_web_project_click
end
object m_web_infopages: TMenuItem
Caption = 'm_web_infopages'
ImageIndex = 14
OnClick = m_web_infopages_click
end
object m_web_forum: TMenuItem
Caption = 'm_web_forum'
ImageIndex = 14
OnClick = m_web_forum_click
end
object seperator6: TMenuItem
Caption = '-'
end
object m_web_update: TMenuItem
Caption = 'm_web_update'
ImageIndex = 11
OnClick = m_web_update_execute
end
object m_web_email: TMenuItem
Caption = 'm_web_email'
ImageIndex = 13
OnClick = m_web_email_click
end
object m_web_keytransmitter: TMenuItem
Caption = 'm_web_keytransmitter'
ImageIndex = 12
ShortCut = 123
OnClick = m_web_keytransmitter_click
end
end
object m_info: TMenuItem
Caption = 'm_info'
ImageIndex = 7
OnClick = m_info_execute
end
end
end
object dlg_open_element: TOpenDialog
Options = [ofReadOnly, ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing]
Left = 360
Top = 176
end
object tmp_progressdurchlauf: TTimer
Tag = 100
Enabled = False
Interval = 10
OnTimer = tmp_progressdurchlauf_timer
Left = 360
Top = 144
end
end
/trunk/Quelltext/Main.pas
0,0 → 1,3883
unit Main;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, DECUtil,
DECHash, DECCipher, registry, KAZip, shlobj, StdCtrls, math,
shellapi, Buttons, ComCtrls, ExtCtrls, inifiles, DragDropFile, DragDrop,
ImgList, base64, ZLib, wininet, OneInst, DCConst, Dialogs,
Menus{, XPMenu};
 
type
TCase = (tcUnknown, tcEncrypted, tcDecrypted);
 
TProgress = class(TInterfacedObject, IDECProgress)
procedure Process(const Min, Max, Pos: Int64); stdcall;
constructor Create;
destructor Destroy; override;
end;
 
TMainForm = class(TForm)
dlg_open: TOpenDialog;
dlg_save_dec: TSaveDialog;
dlg_save_enc: TSaveDialog;
tmr_capslock: TTimer;
img_type: TImage;
lbl_vle1: TLabel;
edt_vle1: TEdit;
edt_vle2: TEdit;
lbl_vle2: TLabel;
lbl_vle3: TLabel;
edt_vle3: TEdit;
lbl_vle4: TLabel;
edt_vle4: TEdit;
lbl_vle5: TLabel;
edt_vle5: TEdit;
lbl_vle6: TLabel;
edt_vle6: TEdit;
lbl_vle7: TLabel;
edt_vle7: TEdit;
lbl_passwort: TLabel;
edt_passwort: TEdit;
lbl_passwort2: TLabel;
edt_passwort2: TEdit;
img_warning: TImage;
lbl_capswarning: TLabel;
chk_securedelete: TCheckBox;
lbl_entropy: TLabel;
lbl_equal: TLabel;
imagelist: TImageList;
img_error: TImage;
lbl_readerror: TLabel;
b_encrypt: TBitBtn;
b_decrypt: TBitBtn;
b_direct: TBitBtn;
b_open: TBitBtn;
b_folder: TBitBtn;
chk_compress: TCheckBox;
tmr_refresh: TTimer;
mainmenu: TMainMenu;
mm_file: TMenuItem;
m_open: TMenuItem;
m_folder: TMenuItem;
seperator1: TMenuItem;
m_config: TMenuItem;
seperator2: TMenuItem;
m_close: TMenuItem;
m_exit: TMenuItem;
mm_actions: TMenuItem;
mm_help: TMenuItem;
m_help: TMenuItem;
m_web_update: TMenuItem;
m_info: TMenuItem;
m_encrypt: TMenuItem;
m_decrypt: TMenuItem;
m_direct: TMenuItem;
seperator5: TMenuItem;
m_delete: TMenuItem;
m_web: TMenuItem;
seperator6: TMenuItem;
m_web_dm: TMenuItem;
m_web_vts: TMenuItem;
m_web_project: TMenuItem;
m_web_keytransmitter: TMenuItem;
m_web_email: TMenuItem;
mm_dateiensammlung: TMenuItem;
m_dateiensammlung_add_file: TMenuItem;
m_dateiensammlung_show: TMenuItem;
m_dateiensammlung_neu: TMenuItem;
dlg_open_element: TOpenDialog;
seperator3: TMenuItem;
seperator4: TMenuItem;
m_dateiensammlung_add_folder: TMenuItem;
tmp_progressdurchlauf: TTimer;
m_web_forum: TMenuItem;
m_web_infopages: TMenuItem;
procedure form_closequery(Sender: TObject; var CanClose: Boolean);
procedure kazip_actions_compress(Sender: TObject; Current, Total: Integer);
procedure kazip_actions_decompress(Sender: TObject; Current, Total: Integer);
procedure kazip_add(Sender: TObject; ItemName: string);
procedure kazip_onchange(Sender: TObject; ChangeType: Integer);
procedure kazip_overwrite(Sender:TObject; Var FileName : String; Var Action : TOverwriteAction);
procedure tmr_capslock_timer(Sender: TObject);
procedure form_create(Sender: TObject);
procedure edt_dec_password_keypress(Sender: TObject; var Key: Char);
procedure form_close(Sender: TObject; var Action: TCloseAction);
procedure dropfile_drop(Sender: TObject; ShiftState: TShiftState;
Point: TPoint; var Effect: Integer);
procedure edt_password2_change(Sender: TObject);
procedure edt_enc_password_keypress(Sender: TObject; var Key: Char);
procedure edt_passwort_change(Sender: TObject);
procedure edt_passwort2_keypress(Sender: TObject; var Key: Char);
procedure m_open_execute(Sender: TObject);
procedure m_folder_execute(Sender: TObject);
procedure m_config_execute(Sender: TObject);
procedure m_exit_execute(Sender: TObject);
procedure m_close_execute(Sender: TObject);
procedure m_delete_execute(Sender: TObject);
procedure m_direct_execute(Sender: TObject);
procedure m_encrypt_execute(Sender: TObject);
procedure m_decrypt_execute(Sender: TObject);
procedure mm_actions_execute(Sender: TObject);
procedure mm_file_execute(Sender: TObject);
procedure mm_help_execute(Sender: TObject);
procedure m_help_execute(Sender: TObject);
procedure m_info_execute(Sender: TObject);
procedure edt_passwort_keypress(Sender: TObject; var Key: Char);
procedure edt_passwort_enter(Sender: TObject);
procedure m_web_update_execute(Sender: TObject);
procedure form_show(Sender: TObject);
procedure tmr_refresh_timer(Sender: TObject);
procedure m_web_dm_click(Sender: TObject);
procedure m_web_vts_click(Sender: TObject);
procedure m_web_project_click(Sender: TObject);
procedure m_web_keytransmitter_click(Sender: TObject);
procedure m_web_email_click(Sender: TObject);
procedure m_dateiensammlung_neu_click(Sender: TObject);
procedure m_dateiensammlung_show_click(Sender: TObject);
procedure m_dateiensammlung_add_file_click(Sender: TObject);
procedure m_dateiensammlung_add_folder_click(Sender: TObject);
procedure tmp_progressdurchlauf_timer(Sender: TObject);
procedure m_web_forum_click(Sender: TObject);
procedure m_web_infopages_click(Sender: TObject);
private
steuerelementegesperrt: boolean;
LangArray: Array of TLanguageEntry;
lg_StartFolder: String;
temp_unique_number: string;
DateienCounter, DateienImOrdner: integer;
// Freigegebene Streams, die bei der spontanen Programmbeendigung
// unter Abfang der Exceptions freigegeben werden
BestimmeDateiGroesseSource: TStream;
tempstream: TStream;
CompressInputStream, CompressOutputStream: TFileStream;
CompressionStream: ZLib.TCompressionStream;
DeCompressionStream: ZLib.TDeCompressionStream;
ZippingStream: TStream;
// Ende
procedure progress_position(pos: integer);
procedure progress_text(text, item: string);
procedure Compress(InputFileName, OutputFileName: string);
procedure Decompress(InputFileName, OutputFileName: string);
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
public
// VCL-Ersatz start
DropFile: TDropFileTarget;
KaZip: TKaZip;
//xpmenu: TXPMenu;
// VCL-Ersatz ende
fileopen: string; // geöffnete datei
ersatzname: string; // wenn ein ordner verschlüsselt wird, ordnernamen statt zip-dateinamen angeben
ausgabegesetzt: string; // befehlszeile, wenn gesetzt
errorlevel: integer; // fehlerlevel für befehlszeilenanwendung
flag: byte; // ordner oder datei verschlüsselt?
mode: TCase; // status der geöffneten datei?
fMenuBrush: TBrush;
procedure steuerelementesperren(sperren: boolean);
procedure zeige_wartenform(dothis: boolean);
function GetLangEntry(name: string): string;
procedure OpenFile(fil: string; alternativer_name: string = ''; dateiensammlung: boolean = false);
procedure OpenFolder(fol: string);
procedure SchliesseDatei();
function Unzip(ZipFile, Verzeichnis: string): boolean;
procedure zipfolder(verzeichnis, zipname: string);
procedure addtozip(fileorfolder, zipfile: string);
procedure CreateZipFile(zipfile: string);
procedure freestreams();
procedure DefaultHandler(var Message); override;
procedure ProcessCommandline(lpData: Pointer);
procedure Start;
function BestimmeDateiGroesse(filename: string): string;
end;
 
var
MainForm: TMainForm;
 
implementation
 
uses Config, About, Warten, Elemente;
 
{$R *.dfm}
 
{$R WindowsXP.res}
 
const
// Konstanten
Terminus: String = 'DCTERMINUS';
FileNameTerminus: Char = '?';
DateiTag: Byte = $00;
OrdnerTag: Byte = $01;
DateiCompressTag: Byte = $02;
OrdnerCompressTag: Byte = $03;
TempPre = 'DeCoder_';
TempDirect = 'DeCoder_Sensitiv';
TempExtTmp = '.tmp';
TempExtCmp = '.cmp';
TempExtZip = '.zip';
ExtDC4 = '.dc4';
updateid = 'decoder';
 
// Standardeinstellungen
 
StZIPType: TZipCompressionType = ctNone;
ZLibCompressFile: Boolean = True;
ZLibCompressFolder: Boolean = True;
 
// (De)Coder 4.1 Standardeinstellungen
VTag: Byte = $02;
IDBase: LongInt = $84671842;
SeedSize: Byte = 32;
StMode: TCipherMode = cmCTSx;
StCipher: String = 'TCipher_Rijndael';
StHash: String = 'THash_SHA512';
 
// (De)Coder 4.0 Kompatibilitätseinstellungen
DC40VTag: Byte = $01;
DC40IDBase: LongInt = $59178954;
DC40SeedSize: Byte = 16;
DC40StMode: TCipherMode = cmCTSx;
DC40StCipher: String = 'TCipher_Rijndael';
DC40StHash: String = 'THash_SHA512';
 
// Konstanten von DEC
cyprefix: String = 'TCipher_';
haprefix: String = 'THash_';
CipherModeStr: array[0..8] of string = ('CTSx', 'CBCx', 'CFB8', 'CFBx', 'OFB8', 'OFBx', 'CFS8', 'CFSx', 'ECBx');
 
{ Eine zweite Instanz hat uns ihre Kommandozeilenparameter geschickt }
// von OneInst
procedure TMainForm.WMCopyData(var Msg: TWMCopyData);
var
i: integer;
temp: string;
tpara: string;
begin
if (Msg.CopyDataStruct.dwData = SecondInstMsgId) and (SecondInstMsgId <> 0) then
begin
if (steuerelementegesperrt or wartenform.Visible or
(not mainform.Visible)) and (paramstr_firstposition('/c') <> -1) and
(paramstr_firstposition('/x') <> -1) and (paramstr_firstposition('/e') <> -1) and
(paramstr_firstposition('/?') <> -1) and (paramstr_firstposition('/clean') <> -1) then
begin
temp := ParamBlobToStr(Msg.CopyDataStruct.lpData);
tpara := '';
for i := 0 to ZaehleLinien(temp)-1 do
tpara := tpara + '"'+GebeLinieaus(temp, i+1) + '" ';
 
shellexecute(application.Handle, 'open', pchar(application.exename), pchar(tpara+'/newinstance'), pchar(extractfiledir(application.exename)), sw_normal);
end
else
ProcessCommandline(Msg.CopyDataStruct.lpData);
end
else
{ Tcha wohl doch nicht ID - stimmte nicht }
inherited;
end;
 
{----------------------------------------------------------------------------}
{ Wir überschreiben den DefaultHandler, der alle Nachrichten zuerst bekommt, }
{ damit wir auf die Nachricht mit der ID SecondInstMsgId reagieren können. }
{ (Dies ist notwendig, da wir jetzt noch nicht wissen welchen Wert }
{ die ID haben wird, weswegen wir keine statische Message-Prozedure, }
{ so wie bei WM_COPYDATA, schreiben können.) }
{----------------------------------------------------------------------------}
// von OneInst
procedure TMainForm.DefaultHandler(var Message);
begin
if TMessage(Message).Msg = SecondInstMsgId then
{ Eine zweite Instanz hat uns nach dem Handle gefragt }
{ Es wird in die Message-Queue des Threads gepostet. }
PostThreadMessage(TMessage(Message).WParam, SecondInstMsgId, Handle, 0)
else
{ Ansonsten rufen wir die geerbte Methode auf }
inherited;
end;
 
procedure Schlafen(nDelay: Cardinal);
var
nStart: Cardinal;
begin
nStart := GetTickCount;
while GetTickCount-nStart < nDelay do
begin
Application.ProcessMessages;
Sleep(0);
end;
end;
 
procedure TMainForm.Compress(InputFileName, OutputFileName: string);
begin
try
CompressInputStream:=TFileStream.Create(InputFileName, fmOpenRead);
try
CompressOutputStream:=TFileStream.Create(OutputFileName, fmCreate);
try
CompressionStream:=TCompressionStream.Create(clMax, CompressOutputStream);
try
CompressionStream.CopyFrom(CompressInputStream, CompressInputStream.Size);
finally
CompressionStream.Free;
end;
finally
CompressOutputStream.Free;
end;
finally
CompressInputStream.Free;
end;
except
// z.B. bei Programmabbruch
end;
end;
 
procedure TMainForm.m_web_dm_click(Sender: TObject);
begin
shellexecute(application.Handle, 'open', 'http://www.daniel-marschall.de/', '', '', sw_normal);
end;
 
procedure TMainForm.m_web_project_click(Sender: TObject);
begin
shellexecute(application.Handle, 'open', 'http://www.viathinksoft.de/index.php?page=projektanzeige&seite=projekt-18', '', '', sw_normal);
end;
 
procedure TMainForm.Decompress(InputFileName, OutputFileName: string);
var
Buf: array[0..4095] of Byte;
Count: Integer;
begin
try
CompressInputStream:=TFileStream.Create(InputFileName, fmOpenRead);
try
CompressOutputStream:=TFileStream.Create(OutputFileName, fmCreate);
try
DecompressionStream := TDecompressionStream.Create(CompressInputStream);
try
while true do
begin
Count := DecompressionStream.Read(Buf[0], SizeOf(Buf));
if Count = 0 then
break
else
CompressOutputStream.Write(Buf[0], Count);
end;
finally
DecompressionStream.Free;
end;
finally
CompressOutputStream.Free;
end;
finally
CompressInputStream.Free;
end;
except
// z.B. bei Programmabbruch
end;
end;
 
function TMainForm.GetLangEntry(name: string): string;
var
i: integer;
begin
for i := 0 to high(LangArray) do
begin
if LangArray[i].name = name then
begin
result := LangArray[i].text;
break;
end;
end;
end;
 
function IsCapsLockOn: boolean;
begin
Result := 0 <>
(GetKeyState(VK_CAPITAL) and $01);
end;
 
procedure TMainForm.progress_position(pos: integer);
begin
wartenform.pbr_progress.Position := pos;
if ((wartenform.pbr_progress.Position <> wartenform.pbr_progress.Min) and (GebeLinieaus(ParamZeile, 2) <> '/silent')) and (not wartenform.visible) then
begin
wartenform.Visible := true;
// tmr_openwartenform.Enabled := true;
end;
 
application.ProcessMessages;
end;
 
procedure TMainForm.zeige_wartenform(dothis: boolean);
begin
if dothis then
begin
if (GebeLinieaus(ParamZeile, 2) <> '/silent') and (not wartenform.visible) then
begin
progress_text('', '');
wartenform.Visible := true;
// tmr_openwartenform.Enabled := true;
end;
end
else
begin
progress_text('', '');
wartenform.Visible := false;
// wartenform.tmr_closetimer.enabled := true;
end;
end;
 
procedure TMainForm.progress_text(text, item: string);
begin
wartenform.lbl_info1.caption := text;
wartenform.lbl_info2.caption := item;
application.processmessages;
end;
 
function FormatiereZahlToStr(inp: extended): string;
begin
result := FloatToStrF(inp, ffNumber, 14, 2);
end;
 
function lang_getdirectoryname(): string;
var
myreg: tregistry;
begin
result := '';
myreg := TRegistry.Create;
try
myreg.RootKey := HKEY_CLASSES_ROOT;
if myreg.OpenKey('Directory', false) then
begin
result := myreg.ReadString('');
end;
finally
myreg.free;
end;
end;
 
function kazip_numfiles(ka: tkazip): integer;
var
i, a: Integer;
begin
a := 0;
for i := 0 to ka.FileNames.count - 1 do
begin
if copy(ka.FileNames.Strings[i], length(ka.FileNames.Strings[i]), 1) <> '\' then
inc(a);
end;
result := a;
end;
 
{ function kazip_numfolders(ka: tkazip): integer;
var
i, a: Integer;
begin
a := 0;
for i := 0 to ka.FileNames.count - 1 do
begin
if copy(ka.FileNames.Strings[i], length(ka.FileNames.Strings[i]), 1) = '\' then
inc(a);
end;
result := a;
end; }
 
function IntelligenteDateigroesse(ibytes: int64): string;
begin
if ibytes > power(1024, 5) then
result := FormatiereZahlToStr(ibytes / power(1024, 4))+' EB'
else if ibytes > power(1024, 4) then
result := FormatiereZahlToStr(ibytes / power(1024, 4))+' TB'
else if ibytes > power(1024, 3) then
result := FormatiereZahlToStr(ibytes / power(1024, 3))+' GB'
else if ibytes > power(1024, 2) then
result := FormatiereZahlToStr(ibytes / power(1024, 2))+' MB'
else if ibytes > power(1024, 1) then
result := FormatiereZahlToStr(ibytes / power(1024, 1))+' KB'
else
begin
if ibytes = 1 then
result := FormatiereZahlToStr(ibytes)+' Byte'
else
result := FormatiereZahlToStr(ibytes)+' Bytes';
end;
end;
 
procedure dc_deletefile(Filename: string);
const
buf = 1024;
var
S: TStream;
size: int64;
abbruch: boolean;
lAttributes: integer;
begin
if fileexists(filename) then
begin
try
lAttributes := FileGetAttr(Filename);
if lAttributes and SysUtils.faReadOnly <> 0 then
begin
lAttributes := lAttributes - SysUtils.faReadOnly;
FileSetAttr(Filename, lAttributes);
end;
S := TFileStream.Create(Filename, fmOpenWrite or fmShareExclusive);
try
size := S.Size;
mainform.progress_position(wartenform.pbr_progress.min);
mainform.progress_text(mainform.GetLangEntry('deletefile'), filename);
abbruch := false;
while not abbruch do
begin
size := size - buf;
if size > 0 then
begin
ProtectStream(S, buf);
mainform.progress_position(floor((s.size-size) / s.Size * wartenform.pbr_progress.max));
end
else
begin
if size < 0 then
ProtectStream(S, s.size-s.Position); // wenn nicht size = 0
 
mainform.progress_position(wartenform.pbr_progress.min);
 
abbruch := true;
end;
end;
finally
S.Free;
end;
deletefile(pchar(filename));
except
 
end;
end;
end;
 
procedure dc_deletedir(const Directory: String);
var
SR: TSearchRec;
zus: string;
begin
if copy(Directory, length(Directory), 1) <> '\' then
zus := '\'
else
zus := '';
 
if FindFirst(Directory + zus + '*.*', faAnyFile - faDirectory, SR) = 0 then
try
repeat
try
dc_deletefile(Directory + zus + SR.Name)
except
// z.B. durch Benutzung oder durch Schreibschutz verursacht
end;
until FindNext(SR) <> 0;
finally
SysUtils.FindClose(SR);
end;
 
if FindFirst(Directory + zus + '*.*', faAnyFile, SR) = 0 then
try
repeat
if ((SR.attr and faDirectory) = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
dc_deletedir(Directory + zus + SR.Name + '\');
until FindNext(SR) <> 0;
finally
SysUtils.FindClose(SR);
end;
 
removedirectory(pchar(Directory));
end;
 
// http://www.swissdelphicenter.ch/torry/showcode.php?id=144
function GetTempDir: string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
GetTempPath(SizeOf(Buffer) - 1, Buffer);
Result := StrPas(Buffer);
end;
 
// http://www.delphipraxis.net/post50248.html
function PassphraseQuality(const Password: String): Extended;
// returns computed Quality in range 0.0 to 1.0
// source extracted from Delphi Encryption Compendium, DEC
 
function Entropy(P: PByteArray; L: Integer): Extended;
var
Freq: Extended;
I: Integer;
Accu: array[Byte] of LongWord;
begin
Result := 0.0;
if L <= 0 then Exit;
FillChar(Accu, SizeOf(Accu), 0);
for I := 0 to L-1 do Inc(Accu[P[I]]);
for I := 0 to 255 do
if Accu[I] <> 0 then
begin
Freq := Accu[I] / L;
Result := Result - Freq * (Ln(Freq) / Ln(2));
end;
end;
 
function Differency: Extended;
var
S: String;
L,I: Integer;
begin
Result := 0.0;
L := Length(Password);
if L <= 1 then Exit;
SetLength(S, L-1);
for I := 2 to L do
Byte(S[I-1]) := Byte(Password[I-1]) - Byte(Password[I]);
Result := Entropy(Pointer(S), Length(S));
end;
 
function KeyDiff: Extended;
const
Table = '^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=?`QWERTZUIOPÜ*ASDFGHJKLÖÄ''>YXCVBNM;:_';
var
S: String;
L,I,J: Integer;
begin
Result := 0.0;
L := Length(Password);
if L <= 1 then Exit;
S := Password;
UniqueString(S);
for I := 1 to L do
begin
J := Pos(S[I], Table);
if J > 0 then S[I] := Char(J);
end;
for I := 2 to L do
Byte(S[I-1]) := Byte(S[I-1]) - Byte(S[I]);
Result := Entropy(Pointer(S), L-1);
end;
 
const
GoodLength = 10.0; // good length of Passphrases
var
L: Extended;
begin
Result := Entropy(Pointer(Password), Length(Password));
if Result <> 0 then
begin
Result := Result * (Ln(Length(Password)) / Ln(GoodLength));
L := KeyDiff + Differency;
if L <> 0 then L := L / 64;
Result := Result * L;
if Result < 0 then Result := -Result;
if Result > 1 then Result := 1;
end;
end;
 
///////////////////////////////////////////////////////////////////
// Call back function used to set the initial browse directory.
///////////////////////////////////////////////////////////////////
function BrowseForFolderCallBack(Wnd: HWND; uMsg: UINT;
lParam, lpData: LPARAM): Integer stdcall;
begin
if uMsg = BFFM_INITIALIZED then
SendMessage(Wnd,BFFM_SETSELECTION,1,Integer(@mainform.lg_StartFolder[1]));
result := 0;
end;
 
///////////////////////////////////////////////////////////////////
// This function allows the user to browse for a folder
//
// Arguments:-
// browseTitle : The title to display on the browse dialog.
// NewFolder : Allow to create a new folder
// initialFolder : Optional argument. Use to specify the folder
// initially selected when the dialog opens.
//
// Returns: The empty string if no folder was selected (i.e. if the
// user clicked cancel), otherwise the full folder path.
///////////////////////////////////////////////////////////////////
function BrowseForFolder(const browseTitle: String; const NewFolder: boolean = false;
const initialFolder: String =''): String;
var
browse_info: TBrowseInfo;
folder: array[0..MAX_PATH] of char;
find_context: PItemIDList;
const
BIF_NEWDIALOGSTYLE=$40;
begin
FillChar(browse_info,SizeOf(browse_info),#0);
mainform.lg_StartFolder := initialFolder;
browse_info.pszDisplayName := @folder[0];
browse_info.lpszTitle := PChar(browseTitle);
if NewFolder then
browse_info.ulFlags := BIF_RETURNONLYFSDIRS or BIF_NEWDIALOGSTYLE
else
browse_info.ulFlags := BIF_RETURNONLYFSDIRS;
browse_info.hwndOwner := Application.Handle;
if initialFolder <> '' then
browse_info.lpfn := BrowseForFolderCallBack;
find_context := SHBrowseForFolder(browse_info);
if Assigned(find_context) then
begin
if SHGetPathFromIDList(find_context,folder) then
result := folder
else
result := '';
GlobalFreePtr(find_context);
end
else
result := '';
end;
 
// Entnommen von FileCtrl
procedure CutFirstDirectory(var S: TFileName);
var
Root: Boolean;
P: Integer;
begin
if S = '\' then
S := ''
else
begin
if S[1] = '\' then
begin
Root := True;
Delete(S, 1, 1);
end
else
Root := False;
if S[1] = '.' then
Delete(S, 1, 4);
P := AnsiPos('\',S);
if P <> 0 then
begin
Delete(S, 1, P);
S := '...\' + S;
end
else
S := '';
if Root then
S := '\' + S;
end;
end;
 
// Entnommen von http://www.delphipraxis.net/post429178.html
function IsFileName(FileName: String): Boolean;
const ForbiddenChars = ['"', '<', '>', '|', '*', '/', '\', '?']; // verbotene Zeichen
 
const ForbiddenNames: Array[0..22] of String[6] = ('AUX', 'NUL', 'PRN' ,'CON', 'CLOCK$', // verbotene Namen
'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9',
'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9');
 
var i: Integer;
var p: PChar;
var FileNameU: String;
begin
Result := False;
 
if FileName <> '' then // Name darf nicht leer sein
begin
i := Length(FileName);
 
if FileName[i] <> '.' then // letze Zeichen darf kein Punkt sein
begin
p := Pointer(FileName);
 
repeat if p^ in ForbiddenChars then
Exit;
inc(p);
until p^ = #0;
 
if (i < 7) and (i > 2) then
begin
FileNameU := UpperCase(FileName);
for i := 0 to High(ForbiddenNames) do
begin
if CompareStr(ForbiddenNames[i], FileNameU) = 0 then
Exit;
end;
end;
 
Result := True;
end;
end;
end;
 
// Original von Codebeispiel von Hagen Reddmann
procedure EncodeFile(const AFileName, AOutput: String; const APassword: Binary);
 
procedure Write(const Value; Size: Integer);
begin
mainform.tempstream.WriteBuffer(Value, Size);
end;
 
procedure WriteByte(Value: Byte);
begin
Write(Value, SizeOf(Value));
end;
 
procedure WriteLong(Value: LongWord);
begin
Value := SwapLong(Value);
Write(Value, SizeOf(Value));
end;
 
procedure WriteBinary(const Value: Binary);
begin
WriteByte(Length(Value));
Write(Value[1], Length(Value));
end;
 
procedure WriteRaw(const Value: Binary);
begin
Write(Value[1], Length(Value));
end;
 
var
Source: TStream;
Seed: Binary;
P: IDECProgress;
ACipher: TDECCipherClass;
AHash: TDECHashClass;
ACFileName: String;
begin
mainform.progress_position(wartenform.pbr_progress.min);
mainform.progress_text(mainform.GetLangEntry('encodedata'), afilename);
 
ACipher := CipherByName(StCipher);
AHash := HashByName(StHash);
 
ACipher := ValidCipher(ACipher);
AHash := ValidHash(AHash);
 
Seed := RandomBinary(SeedSize);
 
ACFileName := GetTempDir+TempPre+mainform.temp_unique_number+TempExtCmp;
 
// Ordner (-> ZIP-Dateien) werden nicht nocheinmal komprimiert ... oder doch?
// if (ZLibCompressFile and (mainform.ersatzname = '')) or (ZLibCompressFolder and (mainform.ersatzname <> '')) then
if mainform.chk_compress.checked then
mainform.Compress(AFileName, ACFileName)
else
ACFileName := AFileName;
 
Source := TFileStream.Create(ACFileName, fmOpenRead or fmShareDenyNone);
try
try
mainform.tempstream := TFileStream.Create(AOutput, fmOpenReadWrite or fmCreate);
try
with ACipher.Create do
try
try
Mode := TCipherMode(StMode);
 
Init(AHash.KDFx(APassword, Seed, Context.KeySize));
 
if mainform.ersatzname <> '' then
begin
if mainform.chk_compress.Checked then
writebyte(OrdnerCompressTag)
else
writebyte(OrdnerTag);
end
else
begin
if mainform.chk_compress.Checked then
writebyte(DateiCompressTag)
else
writebyte(DateiTag);
end;
 
WriteByte(VTag);
{if mainform.ersatzname <> '' then
WriteRaw(Base64Encode(ExtractFileName(mainform.ersatzname)))
else
WriteRaw(Base64Encode(ExtractFileName(AFileName)));}
WriteRaw(Base64Encode(mainform.edt_vle1.text));
WriteRaw(FileNameTerminus);
WriteLong(IDBase);
WriteLong(acipher.Identity);
WriteByte(Byte(Mode));
WriteLong(ahash.Identity);
WriteByte(SeedSize);
WriteRaw(Seed);
 
P := TProgress.Create;
try
EncodeStream(Source, mainform.tempstream, Source.Size, P);
except
// Kann auftreten, wenn das Programm beim Verschlüsseln geschlossen wird
exit;
end;
source.Position := 0;
WriteRaw(ahash.CalcBinary(ahash.CalcStream(source, source.size)+Seed+APassword));
WriteRaw(Base64Encode(Terminus));
finally
Free;
end;
except
raise;
end;
finally
try
mainform.tempstream.Free;
except
// kann passieren, wenn der Stream bereits durch FormClose geschlossen wurde
end;
end;
except
// Ist eine temporäre Datei und wird bei Programmbeendigung gelöscht
// dc_deletefile(aoutput);
mainform.steuerelementesperren(false);
raise; // programmablauf endet hier
end;
finally
Source.Free;
end;
end;
 
// Original von Codebeispiel von Hagen Reddmann
procedure DecodeFile(const AFileName, AOutput: String; const APassword: Binary);
var
Source: TStream;
OrigName: string;
ahash: TDECHashClass;
 
procedure Read(var Value; Size: Integer);
begin
Source.ReadBuffer(Value, Size);
end;
 
function ReadByte: Byte;
begin
Read(Result, SizeOf(Result));
end;
 
function ReadLong: LongWord;
begin
Read(Result, SizeOf(Result));
Result := SwapLong(Result);
end;
 
function ReadBinary: Binary;
begin
SetLength(Result, ReadByte);
Read(Result[1], Length(Result));
end;
 
function ReadRaw(leng: integer): Binary;
begin
SetLength(Result, leng);
Read(Result[1], Length(Result));
end;
 
var
ch: string;
{F, }V: Byte;
P: IDECProgress;
Cipher: TDECCipher;
Seed: String;
begin
mainform.progress_position(wartenform.pbr_progress.min);
mainform.progress_text(mainform.GetLangEntry('decodedata'), afilename);
 
Source := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyNone);
try
try
{F := }ReadByte;
V := ReadByte;
 
OrigName := '';
ch := readraw(1);
while ch <> FileNameTerminus do
begin
OrigName := OrigName + ch;
ch := readraw(1);
end;
 
if V = VTag then
begin
OrigName := Base64Decode(OrigName);
ReadLong; // IdendityBase wird bereits bei FileOpen gesetzt
end;
 
mainform.tempstream := TFileStream.Create(AOutput, fmOpenReadWrite or fmCreate);
try
try
Cipher := nil;
if V = DC40VTag then Cipher := ValidCipher(CipherByName(DC40StCipher)).Create;
if V = VTag then Cipher := ValidCipher(CipherByIdentity(ReadLong)).Create;
try
AHash := nil;
if V = DC40VTag then
begin
Cipher.Mode := TCipherMode(DC40StMode);
AHash := HashByName(DC40StHash);
end;
if V = VTag then
begin
Cipher.Mode := TCipherMode(ReadByte);
AHash := HashByIdentity(ReadLong);
end;
AHash := ValidHash(AHash);
 
if V = DC40VTag then
Seed := ReadRaw(DC40SeedSize);
if V = VTag then
Seed := ReadRaw(ReadByte);
 
Cipher.Init(ahash.KDFx(APassword, Seed, Cipher.Context.KeySize));
 
P := TProgress.Create;
try
if V = DC40VTag then
Cipher.DecodeStream(Source, mainform.tempstream, source.size-source.Position-ahash.DigestSize, P);
if V = VTag then
Cipher.DecodeStream(Source, mainform.tempstream, source.size-source.Position-ahash.DigestSize-Length(Base64Encode(Terminus)), P);
except
// Kann auftreten, wenn das Programm beim Verschlüsseln geschlossen wird
exit;
end;
mainform.tempstream.position := 0;
if V = DC40VTag then
begin
if readraw(ahash.DigestSize) <> ahash.CalcStream(mainform.tempstream, mainform.tempstream.size) then
raise EDECException.Create(mainform.GetLangEntry('hasherror'));
end;
if V = VTag then
begin
if readraw(ahash.DigestSize) <> ahash.CalcBinary(ahash.CalcStream(mainform.tempstream, mainform.tempstream.size)+Seed+APassword) then
raise EDECException.Create(mainform.GetLangEntry('hasherror'));
end;
finally
Cipher.Free;
end;
except
// ProtectStream wird in dc_deletefile durchgeführt
// ProtectStream(Dest);
raise;
end;
finally
try
mainform.tempstream.Free;
except
// kann passieren, wenn der Stream bereits durch FormClose geschlossen wurde
end;
end;
except
// Ist eine temporäre Datei und wird bei Programmbeendigung gelöscht
// dc_deletefile(aoutput);
mainform.steuerelementesperren(false);
raise; // programmablauf endet hier
end;
finally
Source.Free;
end;
end;
 
function FindeDateityp(filename: string): string;
var
Reg: TRegistry;
temp: string;
begin
{* Dateityp herausfinden *}
if ExtractFileExt(filename) <> '' then
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
if Reg.OpenKey(ExtractFileExt(filename), false) then
begin
temp := Reg.ReadString('');
Reg.CloseKey();
if temp <> '' then
begin
Reg.OpenKey(temp, false);
temp := Reg.ReadString('');
Reg.CloseKey();
if temp <> '' then
result := temp
else
result := ''; {* Weiterleitung hat keinen Namen für den Dateityp *}
end
else
result := ''; {* Konnte keine Weiterleitung in der Registry finden *}
end
else
result := ''; {* Keinen Eintrag der Erweiterung in der Registry gefunden *}
finally
Reg.free;
end;
end
else
result := ''; {* Keine Erweiterung *}
end;
 
{ function SecureDeleteWhenUnlocked(Filename: string): boolean;
var
exc: boolean;
chk: TStream;
versuche: integer;
begin
result := true;
if fileexists(Filename) then
begin
// Wenn die Datei nicht innerhalb von 5 Sekunden freigegeben, es einfach lassen
versuche := 0;
while versuche <= 500 do
begin
inc(versuche);
try
exc := false;
// DE: shutdownwait=Warte, bis temporäre Dateien freigegeben sind.
// EN: shutdownwait=Wait, till temporary files are unlocked...
// mainform.progress_text(mainform.GetLangEntry('shutdownwait'));
// mainform.progress_position(progress_min);
application.ProcessMessages;
chk := TFileStream.Create(Filename, fmOpenWrite or fmShareExclusive);
Schlafen(10);
chk.free;
except
exc := true; // immer noch gesperrt
end;
if not exc then break; // datei ist wieder schreibbar und somit löschbar
end;
dc_deletefile(Filename);
if fileexists(Filename) then result := false; // Fehlgeschlagen
end;
end; }
 
// http://www.swissdelphicenter.ch/torry/showcode.php?id=2413
function DirectoryIsEmpty(Directory: string): Boolean;
var
SR: TSearchRec;
i: Integer;
begin
Result := False;
FindFirst(IncludeTrailingPathDelimiter(Directory) + '*', faAnyFile, SR);
for i := 1 to 2 do
if (SR.Name = '.') or (SR.Name = '..') then
Result := FindNext(SR) <> 0;
FindClose(SR);
end;
 
procedure DeleteTempFiles();
var
searchResult: TSearchRec;
allesok, nichtsda: boolean;
uqnr: string;
begin
mainform.zeige_wartenform(true);
mainform.steuerelementesperren(true);
try
 
allesok := true;
nichtsda := true;
 
if (copy(lowercase(GebeLinieaus(ParamZeile, 2)), 0, 6) = '/only=') or (copy(lowercase(gebelinieaus(ParamZeile, 3)), 0, 6) = '/only=') then
begin
// Nur Sitzungsdaten von einer Sitzung löscchen
 
if copy(lowercase(GebeLinieaus(ParamZeile, 2)), 0, 6) = '/only=' then
uqnr := copy(GebeLinieaus(ParamZeile, 2), 7, length(GebeLinieaus(ParamZeile, 2))-6);
if copy(lowercase(GebeLinieaus(ParamZeile, 3)), 0, 6) = '/only=' then
uqnr := copy(GebeLinieaus(ParamZeile, 3), 7, length(GebeLinieaus(ParamZeile, 3))-6);
 
if FindFirst(GetTempDir+'*.*', faAnyFile, searchResult) = 0 then
begin
repeat
if (lowercase(copy(extractfilename(searchResult.Name), 0, length(extractfilename(searchResult.Name))-length(extractfileext(searchResult.Name)))) = lowercase(TempPre+uqnr)) and fileexists(GetTempDir+searchResult.Name) then
begin
nichtsda := false;
dc_deletefile(GetTempDir+extractfilename(searchResult.Name));
if fileexists(GetTempDir+extractfilename(searchResult.Name)) then
allesok := false;
end;
until FindNext(searchResult) <> 0;
FindClose(searchResult);
end;
 
if (directoryexists(GetTempDir+TempDirect+'\'+uqnr) and not DirectoryIsEmpty(GetTempDir+TempDirect+'\'+uqnr)) then
begin
nichtsda := false;
dc_deletedir(GetTempDir+TempDirect+'\'+uqnr);
if directoryexists(GetTempDir+TempDirect+'\'+uqnr) then
allesok := false;
end;
 
end
else
begin
// Alle Sitzungsdaten löschen
 
if FindFirst(GetTempDir+'*.*', faAnyFile, searchResult) = 0 then
begin
repeat
if (lowercase(copy(searchResult.Name, 0, length(TempPre))) = lowercase(TempPre)) and fileexists(GetTempDir+searchResult.Name) then
begin
nichtsda := false;
dc_deletefile(GetTempDir+searchResult.Name);
if fileexists(GetTempDir+searchResult.Name) then
allesok := false;
end;
until FindNext(searchResult) <> 0;
FindClose(searchResult);
end;
 
if directoryexists(GetTempDir+TempDirect) then
begin
nichtsda := false;
dc_deletedir(GetTempDir+TempDirect);
if directoryexists(GetTempDir+TempDirect) then
allesok := false;
end;
end;
 
if (lowercase(GebeLinieaus(ParamZeile, 2)) <> '/silent') then
begin
if nichtsda then
Application.MessageBox(pchar(MainForm.GetLangEntry('nothingtoclean')), pchar(MainForm.GetLangEntry('information')), MB_OK + MB_ICONASTERISK)
else
begin
if not allesok then
Application.MessageBox(pchar(MainForm.GetLangEntry('cleaningerror')), pchar(MainForm.GetLangEntry('warning')), MB_OK + MB_ICONEXCLAMATION)
else
Application.MessageBox(pchar(MainForm.GetLangEntry('cleaningok')), pchar(MainForm.GetLangEntry('information')), MB_OK + MB_ICONASTERISK);
end;
end
else
begin
if not allesok then
MainForm.errorlevel := 8; // Datei oder Ordner konnte nicht oder nur teilweise entfernt werden.
end;
 
finally
mainform.steuerelementesperren(false);
mainform.zeige_wartenform(false);
end;
end;
 
{ function HexAnsicht(inp: string): string;
var
i: integer;
begin
result := '';
for i := 1 to length(inp) do
result := result + inttohex(ord(inp[i]), 2) + ' ';
end; }
 
procedure TMainForm.OpenFile(fil: string; alternativer_name: string = ''; dateiensammlung: boolean = false);
var
Source: TStream;
O, T: string;
F, V: byte;
Dateigroesse: int64;
ch: string;
hash: TDECHashClass;
cipher: TDECCipherClass;
InfoSeedSize: byte;
InfoMode: byte;
FileInfo: SHFILEINFO;
 
procedure Read(var Value; Size: Integer);
begin
Source.ReadBuffer(Value, Size);
end;
 
function ReadByte: Byte;
begin
Read(Result, SizeOf(Result));
end;
 
function ReadLong: LongWord;
begin
Read(Result, SizeOf(Result));
Result := SwapLong(Result);
end;
 
function ReadBinary: Binary;
begin
SetLength(Result, ReadByte);
Read(Result[1], Length(Result));
end;
 
function ReadRaw(leng: integer): Binary;
begin
SetLength(Result, leng);
Read(Result[1], Length(Result));
end;
 
procedure Dateibeschaedigt();
begin
// ClientHeight := formanfangsgroesse;
edt_vle3.Text := '-';
edt_vle4.Text := '-';
edt_vle5.Text := GetLangEntry('broken');
edt_vle6.Text := '-';
edt_vle7.Text := '-';
 
lbl_passwort.Visible := false;
lbl_passwort2.Visible := false;
edt_passwort.Visible := false;
edt_passwort2.Visible := false;
lbl_entropy.Visible := false;
lbl_equal.Visible := false;
chk_securedelete.Visible := false;
chk_compress.Visible := false;
tmr_capslock.Enabled := false;
lbl_capswarning.Visible := false;
img_warning.Visible := false;
 
b_decrypt.Visible := false;
b_encrypt.Visible := false;
b_direct.Visible := false;
b_open.Visible := true;
b_folder.Visible := true;
 
if ausgabegesetzt <> '' then
errorlevel := 1 // DC4 Datei beschädigt
else
begin
// Application.MessageBox(pchar(GetLangEntry('errorreading')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP);
img_error.visible := true;
lbl_readerror.visible := true;
end;
end;
 
begin
steuerelementesperren(true);
zeige_wartenform(true);
try
 
m_close.enabled := true;
fileopen := fil;
 
if (alternativer_name <> '') and (fileexists(alternativer_name) or directoryexists(alternativer_name)) then
SHGetFileInfo(PChar(alternativer_name), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_LARGEICON)
else
SHGetFileInfo(PChar(fil), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_LARGEICON);
 
img_type.Picture.Icon.Handle := FileInfo.hIcon;
 
if alternativer_name <> '' then
begin
edt_vle1.Text := ExtractFileName(alternativer_name);
if fileexists(alternativer_name) or directoryexists(alternativer_name) then
edt_vle2.Text := ExtractFilePath(alternativer_name)
else
edt_vle2.Text := ExtractFilePath(fil);
caption := '(De)Coder '+DC4Ver+' [' + extractfilename(alternativer_name) + ']';
end
else
begin
edt_vle1.Text := ExtractFileName(fil);
edt_vle2.Text := ExtractFilePath(fil);
caption := '(De)Coder '+DC4Ver+' [' + extractfilename(fil) + ']';
end;
 
edt_vle3.Text := '';
edt_vle4.Text := '';
edt_vle5.Text := '';
edt_vle6.Text := '';
edt_vle7.Text := '';
 
edt_passwort.Text := '';
edt_passwort2.Text := '';
edt_passwort_change(edt_passwort);
chk_securedelete.Checked := paramzeile_firstposition('/x') <> -1;
chk_compress.Checked := true;
// wird durch edt_enc_password_change automatisch aufgerufen
// edt_enc_password2_change(edt_enc_password2);
 
dlg_save_dec.filter := GetLangEntry('filter_all')+' (*.*)|*.*';
dlg_save_dec.filename := '';
dlg_save_dec.defaultext := '';
dlg_save_enc.filename := '';
 
mode := tcUnknown;
 
Source := TFileStream.Create(fil, fmOpenRead or fmShareDenyNone);
 
try
try
if lowercase(extractfileext(fil)) = lowercase(ExtDC4) then
begin
edt_vle1.Color := clBtnFace;
edt_vle1.ReadOnly := true;
edt_vle1.TabStop := false;
 
F := ReadByte; // ID-Flag (Datei/Ordner)
V := ReadByte; // Versions-Flag
 
if V = DC40VTag then edt_vle5.Text := Format(GetLangEntry('encrypted'), ['(De)Coder 4.0']);
if V = VTag then edt_vle5.Text := Format(GetLangEntry('encrypted'), ['(De)Coder 4.1']);
 
if ((F <> DateiTag) and (F <> DateiCompressTag) and (F <> OrdnerTag) and (F <> OrdnerCompressTag)) or ((V <> DC40VTag) and (V <> VTag)) then
begin
Dateibeschaedigt;
steuerelementesperren(false);
exit;
end;
 
cipher := nil;
hash := nil;
 
if V = DC40VTag then
begin
cipher := CipherByName(DC40StCipher);
hash := HashByName(DC40StHash);
end;
 
if V = VTag then
begin
cipher := CipherByName(StCipher);
hash := HashByName(StHash);
end;
 
cipher := validcipher(cipher);
hash := validhash(hash);
 
// damit später bei DecodeFile entschieden werden kann, ob entzippt werden muss
flag := F;
 
O := '';
ch := readraw(1);
while ch <> FileNameTerminus do
begin
O := O + ch;
ch := readraw(1);
end;
if V = VTag then O := Base64Decode(O);
 
// Idendity Base
if (V = VTag) then
IdentityBase := ReadLong
else
IdentityBase := DC40IDBase;
 
InfoSeedSize := DC40SeedSize;
InfoMode := Byte(DC40StMode);
if (V = VTag) then
begin
cipher := CipherByIdentity(ReadLong);
InfoMode := ReadByte;
hash := HashByIdentity(ReadLong);
 
cipher := ValidCipher(cipher);
hash := ValidHash(hash);
 
InfoSeedSize := ReadByte;
end;
 
if IsFileName(O) then
begin
dlg_save_dec.FileName := O;
dlg_save_dec.DefaultExt := copy(extractfileext(O), 1, length(extractfileext(O)));
end
else
begin
dateibeschaedigt;
steuerelementesperren(false);
exit;
end;
 
edt_vle6.Text := O;
 
if (F = OrdnerTag) or (F = OrdnerCompressTag) then
begin
T := lang_getdirectoryname;
ersatzname := O; // damit nach decodefile der richtige ordnername verwendet wird
end;
if (F = DateiTag) or (F = DateiCompressTag) then
begin
T := FindeDateityp(O);
ersatzname := '';
end;
 
if (T = '') then T := Format(GetLangEntry('x-file'), [uppercase(copy(extractfileext(O), 2, length(extractfileext(O))-1))]);
edt_vle3.Text := T;
 
dlg_save_dec.Filter := T+' (*'+lowercase(extractfileext(O))+')|*'+lowercase(extractfileext(O))+'|'+GetLangEntry('filter_all')+' (*.*)|*.*';
 
Dateigroesse := source.size - hash.DigestSize - source.Position - InfoSeedSize;
If V = VTag then Dateigroesse := Dateigroesse - length(Base64Encode(Terminus));
 
if Dateigroesse < 0 then
begin
dateibeschaedigt;
steuerelementesperren(false);
exit;
end
else
begin
if (F = DateiCompressTag) or (F = OrdnerTag) or (F = OrdnerCompressTag) then edt_vle4.Text := GetLangEntry('compressed')+': ';
edt_vle4.Text := edt_vle4.Text + IntelligenteDateigroesse(Dateigroesse);
end;
 
if V = VTag then
begin
source.Position := source.Size - length(Base64Encode(terminus));
if ReadRaw(length(Base64Encode(terminus))) <> Base64Encode(terminus) then
begin
dateibeschaedigt;
steuerelementesperren(false);
exit;
end;
end;
 
edt_vle7.Text := copy(cipher.ClassName, length(cyprefix)+1, length(cipher.ClassName)-length(cyprefix)) +
' ('+CipherModeStr[InfoMode]+'), ' +
copy(hash.ClassName, length(haprefix)+1, length(hash.ClassName)-length(haprefix)) +
' (' + Format(GetLangEntry('x-byte-seed'), [InfoSeedSize]) + ')';
 
// source.Position := source.size - cipher.context.BufferSize - hash.DigestSize;
// l_calcmac, HexAnsicht(readraw(cipher.context.BufferSize)
// l_filehash, HexAnsicht(readraw(hash.DigestSize)
 
b_decrypt.Visible := true;
b_encrypt.Visible := false;
b_direct.Visible := true;
b_open.Visible := false;
b_folder.Visible := false;
 
chk_compress.Visible := false;
 
mode := tcEncrypted;
end
else
begin
edt_vle1.Color := clWindow;
edt_vle1.ReadOnly := false;
edt_vle1.TabStop := true;
 
IdentityBase := IDBase;
 
// damit später in EncodeFile nicht der Name der DeCoder.zip geschrieben wird, sondern der Verzeichnisname
ersatzname := alternativer_name;
 
edt_vle5.Text := GetLangEntry('unencrypted');
 
edt_vle6.Text := '-';
 
if alternativer_name <> '' then
begin
if alternativer_name = getlangentry('dateiensammlung') then
T := getlangentry('dateiensammlung')
else
T := lang_getdirectoryname;
end
else
begin
T := FindeDateityp(fil);
if (T = '') then T := Format(GetLangEntry('x-file'), [uppercase(copy(extractfileext(fil), 2, length(extractfileext(fil))-1))]);
end;
edt_vle3.Text := T;
 
edt_vle4.Text := IntelligenteDateigroesse(source.size);
 
edt_vle7.Text := '-';
 
b_decrypt.Visible := false;
b_encrypt.Visible := true;
b_direct.Visible := false;
b_open.Visible := false;
b_folder.Visible := false;
 
chk_compress.Visible := true;
if alternativer_name = '' then
chk_compress.Checked := ZLibCompressFile
else
chk_compress.Checked := ZLibCompressFolder;
 
mode := tcDecrypted;
end;
 
finally
source.free;
end;
except
dateibeschaedigt;
steuerelementesperren(false);
exit;
end;
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
 
lbl_passwort.Visible := true;
lbl_passwort2.Visible := mode <> tcEncrypted;
edt_passwort.Visible := true;
edt_passwort2.Visible := mode <> tcEncrypted;
lbl_entropy.Visible := mode <> tcEncrypted;
lbl_equal.Visible := mode <> tcEncrypted;
chk_securedelete.Visible := true;
lbl_readerror.Visible := false;
img_error.Visible := false;
tmr_capslock.Enabled := true;
 
if ((mode = tcDecrypted) or (mode = tcEncrypted)) and (edt_passwort.Showing) then edt_passwort.SetFocus;
mm_actions.visible := mode <> tcUnknown;
m_encrypt.Enabled := mode = tcDecrypted;
m_decrypt.Enabled := mode = tcEncrypted;
m_direct.Enabled := mode = tcEncrypted;
 
if (alternativer_name = getlangentry('dateiensammlung')) and (mode = tcDecrypted) then
begin
m_dateiensammlung_add_file.Enabled := true;
m_dateiensammlung_add_folder.Enabled := true;
m_dateiensammlung_show.Enabled := true;
end
else
begin
m_dateiensammlung_add_file.Enabled := false;
m_dateiensammlung_add_folder.Enabled := false;
m_dateiensammlung_show.Enabled := false;
end;
 
application.Restore;
application.BringToFront;
 
tmr_refresh.Enabled := true;
end;
 
procedure TMainForm.kazip_onchange(Sender: TObject; ChangeType: Integer);
begin
//
end;
 
procedure TMainForm.kazip_overwrite(Sender:TObject; Var FileName : String; Var Action : TOverwriteAction);
begin
//
end;
 
procedure TMainForm.form_create(Sender: TObject);
var
ini: TIniFile;
str: TStringList;
i: integer;
begin
ClientHeight := 297; // Bug in Delphi verändert manchmal Formhöhe
 
errorlevel := 0; // Keine Fehler
// Sprachdatei einlesen
if fileexists(ExtractFilePath(Application.ExeName)+'Language.ini') then
begin
ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Language.ini');
 
// Version prüfen
if (ini.ReadString('Signature', 'Version', '') <> DC4Ver) then
begin
// paramstr() wird verwendet, weil ParamZeile erst bei Start() gesetzt wird
if not ((paramstr_firstposition('/clean') <> -1) and (paramstr_firstposition('/silent') <> -1)) then
begin
Application.MessageBox('Language.ini', 'Signature?', MB_OK + MB_ICONERROR);
errorlevel := 11;
close;
exit;
end;
end;
 
str := TStringList.Create();
try
ini.ReadSection(Name, str);
for i := 0 to str.count-1 do
begin
setlength(LangArray, length(LangArray)+1);
LangArray[length(LangArray)-1].name := str.strings[i];
LangArray[length(LangArray)-1].text := ini.ReadString(name, str.strings[i], '?');
LangArray[length(LangArray)-1].text := StringReplace(LangArray[length(LangArray)-1].text, '###', #13#10, [rfReplaceAll]);
end;
finally
ini.free;
str.Free;
end;
end
else
begin
Application.MessageBox('Language.ini', 'Error', MB_OK + MB_ICONERROR);
errorlevel := 11;
close;
exit;
end;
 
// Jetzt gehts los...
 
// VCL-Ersatz
 
DropFile := TDropFileTarget.Create(self);
DropFile.Dragtypes := [dtCopy];
DropFile.OnDrop := dropfile_drop;
 
KaZip := TKaZip.Create(self);
KaZip.UseTempFiles := false;
kazip.CompressionType := StZIPType;
KaZip.OverwriteAction := oaOverwriteAll;
KaZip.OnDecompressFile := kazip_actions_decompress;
KaZip.OnCompressFile := kazip_actions_compress;
KaZip.OnZipChange := kazip_onchange;
//KaZip.OnZipOpen := kazip_actions;
KaZip.OnAddItem := kazip_add;
//KaZip.OnRebuildZip := kazip_actions;
//KaZip.OnRemoveItems := kazip_actions;
KaZip.OnOverwriteFile := kazip_overwrite;
 
{xpmenu := TXPMenu.Create(self);
xpmenu.XPControls := [xcMainMenu];
xpmenu.Gradient := true;
xpmenu.Active := true;}
 
// Anwendung vorbereiten
 
RegisterDECClasses([TCipher_Blowfish, TCipher_Twofish, TCipher_IDEA,
TCipher_Cast256, TCipher_Mars, TCipher_RC4, TCipher_RC6, TCipher_Rijndael,
TCipher_Square, TCipher_SCOP, TCipher_Sapphire, TCipher_1DES, TCipher_2DES,
TCipher_3DES, TCipher_2DDES, TCipher_3DDES, TCipher_3TDES, TCipher_3Way,
TCipher_Cast128, TCipher_Gost, TCipher_Misty, TCipher_NewDES, TCipher_Q128,
TCipher_RC2, TCipher_RC5, TCipher_SAFER, TCipher_Shark, TCipher_Skipjack,
TCipher_TEA, TCipher_TEAN]);
 
RegisterDECClasses([THash_MD2, THash_MD4, THash_MD5, THash_SHA, THash_SHA1,
THash_SHA256, THash_SHA384, THash_SHA512, THash_Sapphire, THash_Panama,
THash_Tiger, THash_RipeMD128, THash_RipeMD160, THash_RipeMD256,
THash_RipeMD320, THash_Haval128, THash_Haval160, THash_Haval192,
THash_Haval224, THash_Haval256, THash_Whirlpool, THash_Whirlpool1,
THash_Square, THash_Snefru128, THash_Snefru256]);
 
SetDefaultCipherClass(CipherByName(StCipher));
SetDefaultHashClass(HashByName(StHash));
 
RandomSeed;
 
Randomize;
temp_unique_number := inttostr(random(2147483647));
 
// Formular vorbereiten
img_warning.Picture.Bitmap.LoadFromResourceName(hInstance, 'WARNING');
img_error.Picture.Bitmap.LoadFromResourceName(hInstance, 'ERROR');
img_type.Picture.Bitmap.LoadFromResourceName(hInstance, 'NOOPEN');
 
mm_file.Caption := GetLangEntry('file');
m_open.Caption := GetLangEntry('openhint');
m_folder.Caption := GetLangEntry('folderhint');
m_config.Caption := GetLangEntry('confighint');
m_close.Caption := GetLangEntry('closefile');
m_exit.Caption := GetLangEntry('exit');
 
mm_dateiensammlung.caption := GetLangEntry('dateiensammlung');
m_dateiensammlung_neu.caption := GetLangEntry('dateiensammlung_neu');
m_dateiensammlung_add_file.caption := GetLangEntry('dateiensammlung_add_file');
m_dateiensammlung_add_folder.caption := GetLangEntry('dateiensammlung_add_folder');
m_dateiensammlung_show.caption := GetLangEntry('dateiensammlung_show');
 
mm_actions.Caption := GetLangEntry('actions');
m_encrypt.Caption := GetLangEntry('enchint');
m_decrypt.Caption := GetLangEntry('dechint');
m_direct.Caption := GetLangEntry('direct');
m_delete.Caption := GetLangEntry('erase');
 
mm_help.Caption := GetLangEntry('help');
m_help.Caption := GetLangEntry('helphint');
m_web_update.Caption := GetLangEntry('updates');
m_web_email.Caption := GetLangEntry('web_email');
m_web_keytransmitter.Caption := GetLangEntry('web_keytransmitter');
m_info.Caption := GetLangEntry('about');
m_web.Caption := GetLangEntry('web_ressources');
m_web_dm.Caption := GetLangEntry('web_dm');
m_web_vts.Caption := GetLangEntry('web_vts');
m_web_project.Caption := GetLangEntry('web_project');
m_web_infopages.Caption := GetLangEntry('web_infopages');
m_web_forum.Caption := GetLangEntry('web_forum');
 
b_open.Caption := GetLangEntry('openhint');
b_folder.Caption := GetLangEntry('folderhint');
b_encrypt.Caption := GetLangEntry('enchint');
b_decrypt.Caption := GetLangEntry('dechint');
b_direct.Caption := GetLangEntry('direct');
 
caption := '(De)Coder '+DC4Ver;
lbl_vle1.Caption := GetLangEntry('opened');
lbl_vle2.Caption := GetLangEntry('location');
lbl_vle3.Caption := GetLangEntry('filetype');
lbl_vle4.Caption := GetLangEntry('filesize');
lbl_vle5.Caption := GetLangEntry('status');
lbl_vle6.Caption := GetLangEntry('originalname');
lbl_vle7.Caption := GetLangEntry('cryptmode');
lbl_passwort.caption := GetLangEntry('password');
lbl_passwort2.caption := GetLangEntry('repassword');
lbl_equal.Hint := GetLangEntry('equalhint');
lbl_equal.caption := '';
lbl_entropy.Hint := GetLangEntry('entropy');
chk_securedelete.Caption := GetLangEntry('securedelete');
chk_compress.Caption := GetLangEntry('compress');
img_warning.Hint := GetLangEntry('capswarning');
lbl_capswarning.caption := GetLangEntry('capslock');
lbl_capswarning.Hint := GetLangEntry('capswarning');
dlg_open.filter := GetLangEntry('filter_all')+' (*.*)|*.*|'+GetLangEntry('filter_encrypted')+' (*.dc4)|*.dc4';
dlg_open_element.filter := GetLangEntry('filter_all')+' (*.*)|*.*';
dlg_save_dec.filter := GetLangEntry('filter_all')+' (*.*)|*.*';
dlg_save_enc.filter := GetLangEntry('filter_encrypted')+' (*.dc4)|*.dc4';
lbl_readerror.caption := GetLangEntry('errorreading');
//progress_position(wartenform.ProgressBar1.min);
 
edt_vle1.text := GetLangEntry('nofile');
lbl_entropy.Caption := '';
 
DropFile.Register(mainform);
 
// Dynamische Größenanpassung der Elemente aufgrund verschiedener Sprachen
 
edt_vle1.left := lbl_vle1.Left + 8 + max_7(lbl_vle1.Width, lbl_vle2.Width, lbl_vle3.Width, lbl_vle4.Width, lbl_vle5.Width, lbl_vle6.Width, lbl_vle7.Width);
edt_vle2.left := edt_vle1.left;
edt_vle3.left := edt_vle1.left;
edt_vle4.left := edt_vle1.left;
edt_vle5.left := edt_vle1.left;
edt_vle6.left := edt_vle1.left;
edt_vle7.left := edt_vle1.left;
 
edt_vle1.Width := clientwidth - edt_vle1.Left - 8;
edt_vle2.Width := edt_vle1.Width;
edt_vle3.Width := edt_vle1.Width;
edt_vle4.Width := edt_vle1.Width;
edt_vle5.Width := edt_vle1.Width;
edt_vle6.Width := edt_vle1.Width;
edt_vle7.Width := edt_vle1.Width;
 
edt_passwort.left := lbl_passwort.left + max_2(lbl_passwort.width, lbl_passwort2.width) + 8;
edt_passwort2.left := edt_passwort.left;
lbl_entropy.left := edt_passwort.left + edt_passwort.width + 8;
lbl_equal.left := lbl_entropy.left;
end;
 
function FindeFreienOrdnernamen(verzeichnis: string): string;
var
i: integer;
act: string;
begin
act := verzeichnis;
i := 1;
while directoryexists(act) or fileexists(act) do
begin
inc(i);
act := verzeichnis+' ('+inttostr(i)+')';
end;
result := act;
end;
 
function NumberOfFiles(RootFolder: string): integer;
var
SR: TSearchRec;
Num: integer;
begin
Num := 0;
result := 0;
 
if RootFolder = '' then
Exit;
if AnsiLastChar(RootFolder)^ <> '\' then
RootFolder := RootFolder + '\';
 
RootFolder := IncludeTrailingPathDelimiter(RootFolder);
 
if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory = faDirectory then
// --> ein Verzeichnis wurde gefunden
if (SR.Name <> '.') and (SR.Name <> '..') then
Num := Num + NumberOfFiles(RootFolder + SR.Name);
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory <> faDirectory then
begin
// --> eine Datei wurde gefunden
inc(Num);
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
 
result := Num;
end;
 
procedure TMainForm.openfolder(fol: string);
var
tz: string;
begin
steuerelementesperren(true);
zeige_wartenform(true);
try
 
// Vorrausberechnung für ZIP-Vorgang
DateienImOrdner := NumberOfFiles(fol);
DateienCounter := 0;
 
// Tempname
tz := GetTempDir+TempPre+temp_unique_number+TempExtZip;
 
dc_deletefile(tz);
zipfolder(fol, tz);
 
if fileexists(tz) then
begin
// Oha! Ein ganzes Laufwerk wurde verschlüsselt (da hat jemand zu viel Zeit...)
if copy(fol, length(fol)-1, 2) = ':\' then
fol := GetLangEntry('drive')+' '+copy(fol, 0, 1);
openfile(tz, fol, false);
end;
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
 
procedure TMainForm.zipfolder(verzeichnis, zipname: string);
begin
try
KAZip.Close;
except
 
end;
 
progress_position(wartenform.pbr_progress.min);
progress_text(GetLangEntry('zip_folder'), verzeichnis);
 
try
CreateZipFile(zipname);
 
KAZip.Open(zipname);
kazip.AddFolder(verzeichnis, verzeichnis, '*', true);
kazip.close;
except
// Kann auftreten, wenn Anwendung beim Zippen geschlossen wurde
end;
 
progress_position(wartenform.pbr_progress.min);
end;
 
procedure TMainForm.freestreams();
begin
// ich kenne keine andere möglichkeit, den laufenden cipher-prozess zu beenden
// ich gebe einfach den stream frei und fange die exceptions ab
 
try
kazip.Close;
except
end;
 
try
tempstream.Free;
except
end;
 
try
CompressInputStream.free;
except
end;
 
try
CompressOutputStream.free;
except
end;
 
try
CompressionStream.free;
except
end;
 
try
DeCompressionStream.Free;
except
end;
 
try
ZippingStream.Free;
except
end;
 
try
DropFile.unregister;
except
end;
 
try
DropFile.Free;
except
end;
 
try
KaZip.Free;
except
end;
 
try
BestimmeDateiGroesseSource.Free;
except
end;
 
{try
XPMenu.Free;
except
end;}
end;
 
procedure TMainForm.form_close(Sender: TObject; var Action: TCloseAction);
begin
steuerelementesperren(true);
bordericons := [];
 
// Weitermachen, bis die Dateien nicht mehr gesperrt ist
// wird nun von eigenen Prozess übernommen
// SecureDeleteWhenUnlocked(GetTempDir+TempPre+temp_unique_number+TempExtTmp);
// SecureDeleteWhenUnlocked(GetTempDir+TempPre+temp_unique_number+TempExtZip);
 
// Beim Beenden, sollen nur die temporären Dateien der aktuellen Sitzung entfernt werden,
// daher macht diese Zeile wenig Sinn!
// if paramzeile_firstposition('/clean') = -1 then
// ShellExecute(application.Handle, 'open', pchar(application.exename), pchar('/clean /silent'), pchar(extractfilepath(application.exename)), SW_HIDE);
 
// Information: Da 10 Sekunden bei /clean /silent gewartet wird, kann bereits hier gestartet werden
 
if (paramzeile_firstposition('/clean') = -1) and (errorlevel <> 11) then
ShellExecute(application.Handle, 'open', pchar(application.exename), pchar('/clean /silent /only='+temp_unique_number), pchar(extractfilepath(application.exename)), SW_HIDE);
 
try
freestreams;
except
 
end;
 
halt(mainform.errorlevel);
 
//application.Terminate; // Wenn über Befehlszeile verschlüsselt wird,
// dann ist diese Zeile notwendig, ansonsten endet
// die Anwendung nie
end;
 
function TMainForm.Unzip(ZipFile, Verzeichnis: string): boolean;
begin
result := true;
steuerelementesperren(true);
zeige_wartenform(true);
try
progress_position(wartenform.pbr_progress.min);
progress_text(GetLangEntry('unzip_folder'), zipfile);
kazip.Open(ZipFile);
DateienImOrdner := kazip_numfiles(kazip);
DateienCounter := 0;
if (not kazip.IsZipFile) and (not kazip.HasBadEntries) then
begin
removedir(Verzeichnis);
if ausgabegesetzt = '' then
Application.MessageBox(pchar(GetLangEntry('archivecorrupt')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP);
result := false;
end
else
begin
try
kazip.ExtractAll(Verzeichnis);
except
 
end;
end;
kazip.Close;
progress_position(wartenform.pbr_progress.min);
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
 
procedure TMainForm.m_web_vts_click(Sender: TObject);
begin
shellexecute(application.Handle, 'open', 'http://www.viathinksoft.de/', '', '', sw_normal);
end;
 
procedure TMainForm.mm_actions_execute(Sender: TObject);
begin
// platzhalter, damit enabled
end;
 
procedure TMainForm.mm_file_execute(Sender: TObject);
begin
// platzhalter, damit enabled
end;
 
procedure TMainForm.mm_help_execute(Sender: TObject);
begin
// platzhalter, damit enabled
end;
 
procedure TMainForm.m_web_infopages_click(Sender: TObject);
begin
shellexecute(application.Handle, 'open', 'http://www.viathinksoft.de/info/decoder/', '', '', sw_normal);
end;
 
procedure TMainForm.m_web_forum_click(Sender: TObject);
begin
shellexecute(application.Handle, 'open', 'http://www.viathinksoft.de/devboard/viewforum.php?f=32', '', '', sw_normal);
end;
 
procedure TMainForm.m_help_execute(Sender: TObject);
begin
if fileexists(extractfilepath(application.exename)+'help.html') then
ShellExecute(Application.Handle, 'open', PChar(extractfilepath(application.exename)+'help.html'), '', '', SC_DEFAULT)
else
Application.MessageBox(pchar(GetLangEntry('helpnotfound')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP);
end;
 
procedure TMainForm.dropfile_drop(Sender: TObject; ShiftState: TShiftState;
Point: TPoint; var Effect: Integer);
var
i: integer;
begin
effect := DROPEFFECT_NONE; // damit stürzt Windows 95 nicht ab
 
steuerelementesperren(true);
zeige_wartenform(true);
try
 
if DropFile.Files.Count > 1 then
begin
try
kazip.close;
except
 
end;
 
if fileexists(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip) then
deletefile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
CreateZipFile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
for i := 0 to dropfile.Files.Count - 1 do
begin
addtozip(dropfile.Files.strings[i], GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip)
end;
 
openfile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip, GetLangEntry('dateiensammlung'), true);
end
else
begin
if fileexists(dropfile.Files.strings[0]) then
openfile(dropfile.Files.strings[0], '', false);
 
if directoryexists(dropfile.Files.strings[0]) then
openfolder(dropfile.Files.strings[0]);
end;
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
 
procedure TMainForm.edt_passwort_change(Sender: TObject);
var
qu: extended;
r, g: integer;
const
helligkeit: byte = 128;
begin
qu := PassphraseQuality(edt_passwort.Text);
 
if qu <= 0.5 then
begin
r := helligkeit;
g := floor(qu*helligkeit*2);
end
else
begin
r := helligkeit-floor((qu-0.5)*helligkeit*2);
g := helligkeit;
end;
 
lbl_entropy.Caption := inttostr(round(qu*100)) + '%';
lbl_entropy.font.color := rgb(r, g, 0);
 
edt_password2_change(sender);
end;
 
procedure TMainForm.m_exit_execute(Sender: TObject);
begin
close;
end;
 
// von Krypto Anarkist
procedure TMainForm.edt_passwort2_keypress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
Key := #0;
// Ist Shift zusätzlich gedrückt?
if GetKeyState(VK_Shift) and $8000 <> 0 then
PostMessage(Handle, WM_NEXTDLGCTL, 1, 0) //edt_enc_password.SetFocus;
else
if m_encrypt.Enabled then m_encrypt.Click;
end;
 
edt_passwort_keypress(sender, key);
end;
 
// von Krypto Anarkist
procedure SimulateKeyDown(Key : byte);
begin
keybd_event(Key, 0, 0, 0);
end;
 
// von Krypto Anarkist
procedure SimulateKeyUp(Key : byte);
begin
keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
end;
 
// von Krypto Anarkist
procedure SimulateKeystroke(Key : byte; extra : DWORD);
begin
keybd_event(Key,
extra,
0,
0);
keybd_event(Key,
extra,
KEYEVENTF_KEYUP,
0);
end;
 
// von Krypto Anarkist
procedure SendKeys(s : string);
var
i : integer;
flag : bool;
w : word;
begin
{Get the state of the caps lock key}
flag := not GetKeyState(VK_CAPITAL) and 1 = 0;
{If the caps lock key is on then turn it off}
if flag then
SimulateKeystroke(VK_CAPITAL, 0);
for i := 1 to Length(s) do begin
w := VkKeyScan(s[i]);
{If there is not an error in the key translation}
if ((HiByte(w) <> $FF) and
(LoByte(w) <> $FF)) then begin
{If the key requires the shift key down - hold it down}
if HiByte(w) and 1 = 1 then
SimulateKeyDown(VK_SHIFT);
{Send the VK_KEY}
SimulateKeystroke(LoByte(w), 0);
{If the key required the shift key down - release it}
if HiByte(w) and 1 = 1 then
SimulateKeyUp(VK_SHIFT);
end;
end;
{if the caps lock key was on at start, turn it back on}
if flag then
SimulateKeystroke(VK_CAPITAL, 0);
end;
 
// von Krypto Anarkist
function genGarbageString(chars: integer):string;
var
i: integer;
begin
result := '';
for i := 1 to chars do
result := result + chr(random(95)+32);
end;
 
// http://www.dsdt.info/tipps/?id=28
function KeyPressed(Key: Integer): Boolean;
begin
KeyPressed := (GetAsyncKeyState(Key) and $8000 <> 0);
end;
 
procedure TMainForm.edt_passwort_enter(Sender: TObject);
begin
if not KeyPressed(vk_Menu) and not KeyPressed(vk_Control) then
begin
tedit(sender).Tag := random(configform.upd_garbarge.Position);
sendKeys(genGarbageString(tedit(sender).Tag));
end;
end;
 
// idee von Krypto Anarkist... hat in seiner komponente keypress verwendet, was bugs bei Strg-Kombinationen verursacht hat
procedure TMainForm.edt_passwort_keypress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if m_encrypt.Enabled then m_encrypt.Click;
if m_decrypt.Enabled then m_decrypt.Click;
end
else
begin
if tedit(sender).Tag > 0 then
begin
tedit(sender).Tag := tedit(sender).Tag - 1;
Key := chr(0);
end
else
begin
if not KeyPressed(vk_Menu) and not KeyPressed(vk_Control) then
begin
tedit(sender).Tag := random(configform.upd_garbarge.Position);
sendKeys(genGarbageString(tedit(sender).Tag));
end;
end;
end;
end;
 
procedure TMainForm.form_show(Sender: TObject);
begin
application.Restore;
application.BringToFront;
end;
 
procedure TMainForm.steuerelementesperren(sperren: boolean);
begin
steuerelementegesperrt := sperren;
 
chk_securedelete.enabled := not sperren;
chk_compress.Enabled := not sperren;
img_type.enabled := not sperren;
img_warning.enabled := not sperren;
lbl_capswarning.enabled := not sperren;
img_error.enabled := not sperren;
lbl_readerror.enabled := not sperren;
lbl_passwort.enabled := not sperren;
lbl_passwort2.enabled := not sperren;
lbl_entropy.Enabled := not sperren;
lbl_equal.enabled := not sperren;
lbl_vle1.enabled := not sperren;
lbl_vle2.enabled := not sperren;
lbl_vle3.enabled := not sperren;
lbl_vle4.enabled := not sperren;
lbl_vle5.enabled := not sperren;
lbl_vle6.enabled := not sperren;
lbl_vle7.enabled := not sperren;
edt_vle1.enabled := not sperren;
edt_vle2.enabled := not sperren;
edt_vle3.enabled := not sperren;
edt_vle4.enabled := not sperren;
edt_vle5.enabled := not sperren;
edt_vle6.enabled := not sperren;
edt_vle7.enabled := not sperren;
mm_file.enabled := not sperren;
mm_dateiensammlung.enabled := not sperren;
mm_actions.enabled := not sperren;
mm_help.enabled := not sperren;
b_encrypt.enabled := not sperren;
b_decrypt.enabled := not sperren;
b_direct.enabled := not sperren;
b_open.enabled := not sperren;
b_folder.enabled := not sperren;
edt_passwort.enabled := not sperren;
edt_passwort2.enabled := not sperren;
 
if sperren then
screen.Cursor := crHourGlass
else
screen.Cursor := crDefault;
 
application.ProcessMessages;
end;
 
procedure TMainForm.tmr_refresh_timer(Sender: TObject);
begin
// Bei einem Test mit meinem Windows 98 System kam es zu Fehlern bei den vle-Editboxen
// nach dem Drag&Drop. Daher werden sie her neu gezeichnet nach OpenFile.
 
tmr_refresh.Enabled := false;
 
mainform.edt_vle1.Repaint;
mainform.edt_vle2.Repaint;
mainform.edt_vle3.Repaint;
mainform.edt_vle4.Repaint;
mainform.edt_vle5.Repaint;
mainform.edt_vle6.Repaint;
mainform.edt_vle7.Repaint;
 
lbl_vle1.Repaint;
lbl_vle2.Repaint;
lbl_vle3.Repaint;
lbl_vle4.Repaint;
lbl_vle5.Repaint;
lbl_vle6.Repaint;
lbl_vle7.Repaint;
 
img_error.Repaint;
lbl_readerror.Repaint;
lbl_entropy.Repaint;
lbl_equal.Repaint;
lbl_passwort.Repaint;
lbl_passwort2.Repaint;
edt_passwort.Repaint;
edt_passwort2.Repaint;
chk_securedelete.Repaint;
chk_compress.Repaint;
lbl_capswarning.Repaint;
img_warning.Repaint;
img_type.Repaint;
 
b_direct.Repaint;
b_encrypt.Repaint;
b_decrypt.Repaint;
b_open.Repaint;
b_folder.Repaint;
 
mainform.Repaint;
 
application.ProcessMessages;
end;
 
procedure TMainForm.edt_password2_change(Sender: TObject);
begin
if edt_passwort.Text = edt_passwort2.text then
begin
lbl_equal.caption := GetLangEntry('equal');
lbl_equal.Font.Color := clGreen;
end
else
begin
lbl_equal.caption := GetLangEntry('notequal');
lbl_equal.Font.Color := clMaroon;
end;
end;
 
procedure TMainForm.edt_dec_password_keypress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
key := #0;
m_decrypt.Click;
end;
end;
 
procedure TMainForm.edt_enc_password_keypress(Sender: TObject;
var Key: Char);
begin
if key = #13 then
begin
key := #0;
if not GetKeyState(VK_Shift) and $8000 <> 0 then
PostMessage(Handle, WM_NEXTDLGCTL, 0, 0); //edt_enc_password2.SetFocus;
end;
end;
 
procedure TMainForm.tmp_progressdurchlauf_timer(Sender: TObject);
begin
if wartenform.pbr_progress.Position + (wartenform.pbr_progress.max div ttimer(self).tag) >= wartenform.pbr_progress.max then
progress_position(wartenform.pbr_progress.min)
else
progress_position(wartenform.pbr_progress.position + wartenform.pbr_progress.max div ttimer(self).tag);
end;
 
procedure TMainForm.tmr_capslock_timer(Sender: TObject);
begin
img_warning.visible := IsCapsLockOn;
lbl_capswarning.visible := IsCapsLockOn;
end;
 
procedure TMainForm.kazip_add(Sender: TObject; ItemName: string);
begin
progress_text(GetLangEntry('zip_folder'), ItemName);
inc(DateienCounter);
application.processmessages;
end;
 
procedure TMainForm.m_delete_execute(Sender: TObject);
var
res: integer;
old_ersatzname: string;
begin
res := Application.MessageBox(pchar(GetLangEntry('erasewarning')), pchar(GetLangEntry('warning')), MB_YESNOCANCEL + MB_ICONEXCLAMATION);
 
if res = ID_YES then
begin
zeige_wartenform(true);
steuerelementesperren(true);
try
 
// Ersatzname bei geöffneten Ordner: X:\BlaBlaBla\xxxx\
// Ersatzname bei DC4-Datei mit Ordner-Flag: xxxx
if (copy(ersatzname, 2, 2) = ':\') then
begin
old_ersatzname := ersatzname;
schliessedatei;
dc_deletedir(old_ersatzname);
if directoryexists(old_ersatzname) then
Application.MessageBox(pchar(GetLangEntry('notdeleted')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP)
else
Application.MessageBox(pchar(GetLangEntry('erasesuccessful')), pchar(GetLangEntry('information')), MB_OK + MB_ICONINFORMATION);
end
else
begin
dc_deletefile(fileopen);
if fileexists(fileopen) then
begin
Application.MessageBox(pchar(GetLangEntry('notdeleted')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP);
end
else
begin
schliessedatei;
Application.MessageBox(pchar(GetLangEntry('erasesuccessful')), pchar(GetLangEntry('information')), MB_OK + MB_ICONINFORMATION);
end;
end;
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
end;
 
procedure TMainForm.m_info_execute(Sender: TObject);
begin
AboutForm.PopupParent := Screen.ActiveForm; // http://www.delphipraxis.net/topic75743,0,asc,0.html
AboutForm.showmodal;
end;
 
procedure TMainForm.m_open_execute(Sender: TObject);
var
i: integer;
begin
if dlg_open.execute then
begin
if dlg_open.Files.Count > 1 then
begin
steuerelementesperren(true);
zeige_wartenform(true);
try
 
try
kazip.close;
except
 
end;
 
if fileexists(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip) then
deletefile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
CreateZipFile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
for i := 0 to dlg_open.Files.Count - 1 do
begin
addtozip(dlg_open.Files.strings[i], GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip)
end;
 
openfile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip, GetLangEntry('dateiensammlung'), true);
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end
else
openfile(dlg_open.FileName, '', false);
end;
end;
 
// http://www.delphipraxis.net/post43515.html
Function GetHTML(AUrl: string): string;
var
databuffer : array[0..4095] of char;
ResStr : string;
hSession, hfile: hInternet;
dwindex,dwcodelen,dwread,dwNumber: cardinal;
dwcode : array[1..20] of char;
res : pchar;
Str : pchar;
begin
ResStr:='';
if pos('http://',lowercase(AUrl))=0 then
AUrl:='http://'+AUrl;
 
// Hinzugefügt
application.ProcessMessages;
 
hSession:=InternetOpen('InetURL:/1.0',
INTERNET_OPEN_TYPE_PRECONFIG,
nil,
nil,
0);
if assigned(hsession) then
begin
// Hinzugefügt
application.ProcessMessages;
 
hfile:=InternetOpenUrl(
hsession,
pchar(AUrl),
nil,
0,
INTERNET_FLAG_RELOAD,
0);
dwIndex := 0;
dwCodeLen := 10;
 
// Hinzugefügt
application.ProcessMessages;
 
HttpQueryInfo(hfile,
HTTP_QUERY_STATUS_CODE,
@dwcode,
dwcodeLen,
dwIndex);
res := pchar(@dwcode);
dwNumber := sizeof(databuffer)-1;
if (res ='200') or (res ='302') then
begin
while (InternetReadfile(hfile,
@databuffer,
dwNumber,
DwRead)) do
begin
 
// Hinzugefügt
application.ProcessMessages;
 
if dwRead =0 then
break;
databuffer[dwread]:=#0;
Str := pchar(@databuffer);
resStr := resStr + Str;
end;
end
else
ResStr := 'Status:'+res;
if assigned(hfile) then
InternetCloseHandle(hfile);
end;
 
// Hinzugefügt
application.ProcessMessages;
 
InternetCloseHandle(hsession);
Result := resStr;
end;
 
procedure TMainForm.m_web_update_execute(Sender: TObject);
var
temp: string;
begin
zeige_wartenform(true);
steuerelementesperren(true);
 
progress_position(wartenform.pbr_progress.Min);
progress_text(getlangentry('wait_internet'), '');
 
ttimer(self).tag := 2;
tmp_progressdurchlauf.Enabled := true;
 
temp := GetHTML('http://www.viathinksoft.de/update/?id='+updateid);
if copy(temp, 0, 7) = 'Status:' then
begin
tmp_progressdurchlauf.Enabled := false;
zeige_wartenform(false);
steuerelementesperren(false);
 
Application.MessageBox(pchar(MainForm.GetLangEntry('update_error')), pchar(MainForm.GetLangEntry('error')), MB_OK + MB_ICONERROR)
end
else
begin
if GetHTML('http://www.viathinksoft.de/update/?id='+updateid) <> DC4Ver then
begin
tmp_progressdurchlauf.Enabled := false;
zeige_wartenform(false);
steuerelementesperren(false);
 
if Application.MessageBox(pchar(MainForm.GetLangEntry('update_yes')), pchar(MainForm.GetLangEntry('information')), MB_YESNO + MB_ICONASTERISK) = ID_YES then
shellexecute(application.handle, 'open', pchar('http://www.viathinksoft.de/update/?id=@'+updateid), '', '', sw_normal);
end
else
begin
tmp_progressdurchlauf.Enabled := false;
zeige_wartenform(false);
steuerelementesperren(false);
 
Application.MessageBox(pchar(MainForm.GetLangEntry('update_no')), pchar(MainForm.GetLangEntry('information')), MB_OK + MB_ICONASTERISK);
end;
end;
end;
 
procedure TMainForm.m_web_email_click(Sender: TObject);
begin
shellexecute(application.Handle, 'open', pchar('mailto:info@daniel-marschall.de?subject=(De)Coder '+DC4Ver), '', '', sw_normal);
end;
 
procedure TMainForm.m_config_execute(Sender: TObject);
begin
ConfigForm.PopupParent := Screen.ActiveForm; // http://www.delphipraxis.net/topic75743,0,asc,0.html
ConfigForm.showmodal;
end;
 
procedure TProgress.Process(const Min,Max,Pos: Int64);
var
P: Integer;
begin
P := floor((Pos - Min) / (Max - Min) * wartenform.pbr_progress.max);
mainform.progress_position(P);
application.ProcessMessages;
end;
 
constructor TProgress.Create;
begin
inherited Create;
mainform.progress_position(wartenform.pbr_progress.min);
end;
 
destructor TProgress.Destroy;
begin
inherited Destroy;
mainform.progress_position(wartenform.pbr_progress.min);
end;
 
procedure TMainForm.kazip_actions_compress(Sender: TObject; Current,
Total: Integer);
begin
progress_position(floor(wartenform.pbr_progress.max / DateienImOrdner * (DateienCounter + (Current / Total))));
Application.ProcessMessages;
end;
 
procedure TMainForm.kazip_actions_decompress(Sender: TObject; Current,
Total: Integer);
begin
// Jede einzelne Datei:
// progress_position(floor(Current / Total * wartenform.ProgressBar1.max));
 
inc(DateienCounter);
progress_position(floor(wartenform.pbr_progress.max / DateienImOrdner * DateienCounter));
Application.ProcessMessages;
end;
 
procedure TMainForm.form_closequery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := BorderIcons <> [];
end;
 
procedure TMainForm.m_folder_execute(Sender: TObject);
var
fol: string;
begin
fol := BrowseForFolder(GetLangEntry('foldermessageopen'), true);
if fol <> '' then
OpenFolder(fol);
end;
 
// http://www.delphipraxis.net/post478066.html#478066
procedure ExecuteProgramm(const PFileName: string);
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
ExecuteFile: string;
begin
ExecuteFile := '"' + PFileName + '"';
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
 
with SEInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile);
nShow := SW_SHOWNORMAL;
end;
 
if ShellExecuteEx(@SEInfo) then
begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or
Application.Terminated;
end else
begin
// Application.MessageBox('Fehler beim Starten des Programms', 'Hinweis', MB_OK + MB_ICONERROR);
end;
end;
 
procedure TMainForm.m_direct_execute(Sender: TObject);
var
ctemp, temp: string;
error: boolean;
begin
zeige_wartenform(true);
steuerelementesperren(true);
try
 
forcedirectories(GetTempDir+TempDirect+'\'+temp_unique_number+'\');
 
// Datei
if (flag = DateiTag) or (flag = DateiCompressTag) then
begin
temp := GetTempDir+TempDirect+'\'+temp_unique_number+'\'+edt_vle6.text;
ctemp := GetTempDir+TempPre+temp_unique_number+TempExtCmp;
 
dc_deletefile(temp);
error := false;
try
if (flag = DateiTag) then
DecodeFile(fileopen, temp, edt_passwort.Text);
if (flag = DateiCompressTag) then
begin
DecodeFile(fileopen, ctemp, edt_passwort.Text);
DeCompress(ctemp, temp);
end;
except
// Kann auftreten, wenn das Programm beim entschlüsseln geschlossen wird
on EDECException do
begin
edt_passwort.Text := '';
edt_passwort.SetFocus; // wirkt durch Exception nicht -.-
error := true;
if bordericons <> [] then raise;
end;
else
error := true;
end;
 
if not error then
ExecuteProgramm(temp);
end;
 
// Ordner
if (flag = OrdnerTag) or (flag = OrdnerCompressTag) then
begin
temp := GetTempDir+TempPre+temp_unique_number+TempExtZip;
ctemp := GetTempDir+TempPre+temp_unique_number+TempExtCmp;
 
dc_deletefile(temp);
error := false;
try
if (flag = OrdnerTag) then
DecodeFile(fileopen, temp, edt_passwort.text);
if (flag = OrdnerCompressTag) then
begin
DecodeFile(fileopen, ctemp, edt_passwort.Text);
DeCompress(ctemp, temp);
end;
except
// Kann auftreten, wenn das Programm beim entschlüsseln geschlossen wird
edt_passwort.Text := '';
edt_passwort.SetFocus; // wirkt durch Exception nicht -.-
error := true;
if bordericons <> [] then raise;
end;
 
if not error then
begin
if directoryexists(GetTempDir+TempDirect+'\'+temp_unique_number+'\'+edt_vle6.text) then
dc_deletedir(GetTempDir+TempDirect+'\'+temp_unique_number+'\'+edt_vle6.text);
mkdir(GetTempDir+TempDirect+'\'+temp_unique_number+'\'+edt_vle6.text);
if Unzip(temp, GetTempDir+TempDirect+'\'+temp_unique_number+'\'+edt_vle6.text) then
begin
ExecuteProgramm(GetTempDir+TempDirect+'\'+temp_unique_number+'\'+edt_vle6.text);
end;
end;
end;
 
finally
steuerelementesperren(false);
mainform.zeige_wartenform(false);
end;
end;
 
procedure TMainForm.m_dateiensammlung_add_file_click(Sender: TObject);
var
i: integer;
begin
if dlg_open_element.Execute then
begin
steuerelementesperren(true);
zeige_wartenform(true);
try
 
if dlg_open_element.Files.Count > 1 then
begin
for i := 0 to dlg_open_element.Files.Count - 1 do
begin
addtozip(dlg_open_element.Files.Strings[i], fileopen);
end;
end
else
begin
addtozip(dlg_open_element.filename, fileopen);
end;
 
edt_vle4.Text := BestimmeDateiGroesse(fileopen);
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
end;
 
function TMainForm.BestimmeDateiGroesse(filename: string): string;
begin
BestimmeDateiGroesseSource := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);
try
try
result := IntelligenteDateigroesse(BestimmeDateiGroesseSource.size);
except
result := IntelligenteDateigroesse(0);
end;
finally
BestimmeDateiGroesseSource.free;
end;
end;
 
procedure TMainForm.m_dateiensammlung_add_folder_click(Sender: TObject);
var
fol: string;
begin
fol := BrowseForFolder(getlangentry('dateisammlung_folder_add_message'), true);
if fol <> '' then
begin
steuerelementesperren(true);
zeige_wartenform(true);
try
 
addtozip(fol, fileopen);
edt_vle4.Text := BestimmeDateiGroesse(fileopen);
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
end;
 
procedure TMainForm.m_dateiensammlung_neu_click(Sender: TObject);
begin
steuerelementesperren(true);
zeige_wartenform(true);
try
 
try
kazip.close;
except
 
end;
 
if fileexists(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip) then
deletefile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
CreateZipFile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
 
openfile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip, GetLangEntry('dateiensammlung'), true);
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
 
procedure TMainForm.m_dateiensammlung_show_click(Sender: TObject);
begin
elementeform.PopupParent := Screen.ActiveForm; // http://www.delphipraxis.net/topic75743,0,asc,0.html
elementeform.showmodal;
end;
 
procedure TMainForm.m_decrypt_execute(Sender: TObject);
var
temp, ctemp, fol, neu: string;
error: boolean;
begin
zeige_wartenform(true);
steuerelementesperren(true);
try
 
// Datei
if (flag = DateiTag) or (flag = DateiCompressTag) then
begin
temp := GetTempDir+TempPre+temp_unique_number+TempExtTmp;
ctemp := GetTempDir+TempPre+temp_unique_number+TempExtCmp;
 
dc_deletefile(temp);
error := false;
try
DecodeFile(fileopen, temp, edt_passwort.Text);
if flag = DateiCompressTag then
DeCompress(temp, ctemp)
else
ctemp := temp;
except
// Kann auftreten, wenn das Programm beim entschlüsseln geschlossen wird
on EDECException do
begin
edt_passwort.Text := '';
edt_passwort.SetFocus; // wirkt durch Exception nicht -.-
error := true;
if bordericons <> [] then raise;
end;
else
error := true;
end;
 
// Wenn es zu keinem Fehler kam,
// dann den User fragen, wohin endgültig speichern
if not error then
begin
if ausgabegesetzt <> '' then
begin
// Ausgabeverzeichnis ist durch Befehlszeileneingabe bereits gesetzt
dc_deletefile(ausgabegesetzt);
if movefile(pchar(ctemp), pchar(ausgabegesetzt)) then
begin
if chk_securedelete.Checked then
begin
dc_deletefile(fileopen);
if fileexists(fileopen) then
errorlevel := 6;
end;
end
else
errorlevel := 5;
end
else
begin
if dlg_save_dec.Execute then
begin
dc_deletefile(dlg_save_dec.FileName);
forcedirectories(extractfilepath(dlg_save_dec.filename));
if movefile(pchar(ctemp), pchar(dlg_save_dec.FileName)) then
begin
if chk_securedelete.Checked then
begin
dc_deletefile(fileopen);
if fileexists(fileopen) then
Application.MessageBox(pchar(GetLangEntry('notdeleted')), pchar(GetLangEntry('warning')), MB_OK + MB_ICONEXCLAMATION)
else
schliessedatei;
end;
end
else
Application.MessageBox(pchar(GetLangEntry('moveerror')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP);
end
end;
end;
end;
 
// Ordner
if (flag = OrdnerTag) or (flag = OrdnerCompressTag) then
begin
temp := GetTempDir+TempPre+temp_unique_number+TempExtZip;
ctemp := GetTempDir+TempPre+temp_unique_number+TempExtCmp;
 
dc_deletefile(temp);
error := false;
try
DecodeFile(fileopen, temp, edt_passwort.text);
if flag = OrdnerCompressTag then
begin
DeCompress(temp, ctemp);
dc_deletefile(temp);
movefile(pchar(ctemp), pchar(temp)); // KaZIP kann nur ZIP-Dateien öffnen, keine CMP
end;
except
// Kann auftreten, wenn das Programm beim entschlüsseln geschlossen wird
edt_passwort.Text := '';
edt_passwort.SetFocus; // wirkt durch Exception nicht -.-
error := true;
if bordericons <> [] then raise;
end;
 
// Wenn es zu keinem Fehler kam,
// dann den User fragen, wohin extrahieren (unzippen)
if not error then
begin
if (ausgabegesetzt <> '') then
begin
if copy(ausgabegesetzt, length(ausgabegesetzt), 1) = '\' then
neu := FindeFreienOrdnernamen(ausgabegesetzt+ersatzname)
else
neu := FindeFreienOrdnernamen(ausgabegesetzt+'\'+ersatzname);
if not ForceDirectories(neu) then
errorlevel := 4 // Ausgabeverzeichnis konnte nicht erstellt werden
else
begin
if Unzip(temp, neu) then
begin
if chk_securedelete.Checked then
begin
dc_deletefile(fileopen);
if fileexists(fileopen) then
errorlevel := 6;
end;
end
else
errorlevel := 7;
end;
end
else
begin
fol := BrowseForFolder(GetLangEntry('foldermessagesave'), true);
if fol <> '' then
begin
neu := FindeFreienOrdnernamen(fol+'\'+ersatzname);
if not ForceDirectories(neu) then
Application.MessageBox(pchar(GetLangEntry('mkdirerror')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP)
else
begin
if Unzip(temp, neu) then
begin
if chk_securedelete.Checked then
begin
dc_deletefile(fileopen);
if fileexists(fileopen) then
Application.MessageBox(pchar(GetLangEntry('notdeleted')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP)
else
schliessedatei;
end;
end;
end;
end;
end;
end;
end;
 
// Wird sowieso beim Programmende ausgeführt
// dc_deletefile(temp);
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
 
procedure TMainForm.m_encrypt_execute(Sender: TObject);
var
temp: string;
error: boolean;
begin
if edt_passwort.text <> edt_passwort2.text then
Application.MessageBox(pchar(GetLangEntry('passwordsdifferent')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP)
else
begin
steuerelementesperren(true);
zeige_wartenform(true);
try
 
temp := GetTempDir+TempPre+temp_unique_number+TempExtTmp;
 
dc_deletefile(temp);
error := false;
try
EncodeFile(fileopen, temp, edt_passwort.text);
except
// Kann auftreten, wenn das Programm beim verschlüsseln geschlossen wird
on EDECException do
begin
error := true;
if bordericons <> [] then raise;
end;
else
error := true;
end;
 
// Wenn es zu keinem Fehler kam,
// dann den User fragen, wohin endgültig speichern
if not error then
begin
if ausgabegesetzt <> '' then
begin
// Ausgabeverzeichnis ist durch Befehlszeileneingabe bereits gesetzt
dc_deletefile(ausgabegesetzt);
if (extractfilepath(ausgabegesetzt) <> '') and not ForceDirectories(extractfilepath(ausgabegesetzt)) then
errorlevel := 4
else
begin
if movefile(pchar(temp), pchar(ausgabegesetzt)) then
begin
if chk_securedelete.Checked then
begin
if ersatzname <> '' then
begin
try
dc_deletedir(ersatzname);
except
// Fehler abfangen, sodas er nicht durchgeleitet wird und EL=2 verursacht
end;
if directoryexists(ersatzname) then
errorlevel := 6;
end
else
begin
dc_deletefile(fileopen);
if fileexists(fileopen) then
errorlevel := 6;
end;
end;
end
else
errorlevel := 5;
end;
end
else
begin
if dlg_save_enc.Execute then
begin
dc_deletefile(dlg_save_enc.FileName);
forcedirectories(extractfilepath(dlg_save_enc.filename));
if movefile(pchar(temp), pchar(dlg_save_enc.FileName)) then
begin
if chk_securedelete.Checked then
begin
if ersatzname <> '' then
begin
dc_deletedir(ersatzname);
if directoryexists(ersatzname) then
Application.MessageBox(pchar(GetLangEntry('notdeleted')), pchar(GetLangEntry('warning')), MB_OK + MB_ICONEXCLAMATION)
else
schliessedatei;
end
else
begin
dc_deletefile(fileopen);
if fileexists(fileopen) then
Application.MessageBox(pchar(GetLangEntry('notdeleted')), pchar(GetLangEntry('warning')), MB_OK + MB_ICONEXCLAMATION)
else
schliessedatei;
end;
end;
end
else
Application.MessageBox(pchar(GetLangEntry('moveerror')), pchar(GetLangEntry('error')), MB_OK + MB_ICONSTOP);
end
end;
end;
 
// Wird bei Programmbeendigung ausgeführt
// dc_deletefile(temp);
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
end;
 
procedure TMainForm.m_close_execute(Sender: TObject);
begin
SchliesseDatei;
end;
 
procedure TMainForm.schliessedatei();
begin
m_close.Enabled := false;
mm_actions.visible := false;
m_dateiensammlung_add_file.Enabled := false;
m_dateiensammlung_add_folder.Enabled := false;
m_dateiensammlung_show.Enabled := false;
 
fileopen := '';
ersatzname := '';
ausgabegesetzt := '';
flag := 0;
mode := tcUnknown;
kazip.Close;
 
edt_passwort.Text := '';
edt_passwort2.Text := '';
 
chk_securedelete.Checked := false;
caption := '(De)Coder '+DC4Ver;
progress_position(wartenform.pbr_progress.min);
 
edt_vle1.Text := GetLangEntry('nofile');
edt_vle2.text := '-';
edt_vle3.Text := '-';
edt_vle4.Text := '-';
edt_vle5.Text := '-';
edt_vle6.Text := '-';
edt_vle7.Text := '-';
 
edt_vle1.Color := clBtnFace;
edt_vle1.ReadOnly := true;
edt_vle1.TabStop := false;
 
b_decrypt.Visible := false;
b_encrypt.Visible := false;
b_direct.Visible := false;
b_open.Visible := true;
b_folder.Visible := true;
 
lbl_passwort.Visible := false;
lbl_passwort2.Visible := false;
edt_passwort.Visible := false;
edt_passwort2.Visible := false;
lbl_entropy.Visible := false;
lbl_equal.Visible := false;
chk_securedelete.Visible := false;
lbl_readerror.Visible := false;
img_error.Visible := false;
tmr_capslock.Enabled := false;
lbl_capswarning.Visible := false;
img_warning.Visible := false;
chk_compress.Visible := false;
 
img_type.Picture.Bitmap.LoadFromResourceName(hInstance, 'NOOPEN');
end;
 
procedure TMainForm.m_web_keytransmitter_click(Sender: TObject);
begin
shellexecute(application.Handle, 'open', 'http://www.viathinksoft.de/keytransmitter/', '', '', sw_normal);
end;
 
{ Allgemeine Funktion zum Verarbeiten der Kommandozeilenparameter }
// ursprünglich von OneInst
procedure TMainForm.ProcessCommandline(lpData: Pointer);
var
arbeitsverzeichnis: string;
i: integer;
SR: TSearchRec;
ts: tstringlist;
fehler: boolean;
begin
ParamZeile := ParamBlobToStr(lpData);
 
// Syntaxprüfung der Befehlszeile
 
if ((paramzeile_firstposition('/c') <> -1) and (ZaehleLinien(ParamZeile) > paramzeile_firstposition('/c')+2)) or
((paramzeile_firstposition('/x') <> -1) and (ZaehleLinien(ParamZeile) > paramzeile_firstposition('/x')+2)) or
((paramzeile_firstposition('/e') <> -1) and (ZaehleLinien(ParamZeile) > paramzeile_firstposition('/e')+1)) or
((paramzeile_firstposition('/?') <> -1) and (ZaehleLinien(ParamZeile) > paramzeile_firstposition('/?')+0)) or
((paramzeile_firstposition('/clean') <> -1) and (ZaehleLinien(ParamZeile) > paramzeile_firstposition('/clean')+2)) then
begin
errorlevel := 3; // Falsche Syntax
end;
 
// Anwendung dient nur als Hilfeaufruf
 
if GebeLinieaus(ParamZeile, 1) = '/?' then
begin
m_help.Click;
close;
exit;
end;
 
// Anwendung dient nur als Cleaner
 
if GebeLinieaus(ParamZeile, 1) = '/clean' then
begin
// 10 Sekunden warten, bis ggf. die temporären Dateien freigegeben wurden
if (lowercase(GebeLinieaus(ParamZeile, 2)) = '/silent') then Schlafen(10000);
DeleteTempFiles;
close;
exit;
end;
 
// Verarbeitung der Befehlszeile
 
if (ZaehleLinien(ParamZeile) > 1) then
begin
if (paramzeile_firstposition('/c') <> -1) then
begin
GetDir(0, arbeitsverzeichnis);
ausgabegesetzt := arbeitsverzeichnis+'\'+GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+2);
if paramzeile_firstposition('/c') = 2 then
begin
// 1 Datei soll geöffnet werden
if not fileexists(GebeLinieaus(ParamZeile, 1)) and not directoryexists(GebeLinieaus(ParamZeile, 1)) then
begin
errorlevel := 9; // Datei oder Ordner nicht gefunden.
end
else
begin
ts := tstringlist.Create;
try
if FindFirst(GebeLinieaus(ParamZeile, 1), faAnyFile, SR) = 0 then
try
repeat
ts.Add(sr.Name);
until FindNext(SR) <> 0;
finally
SysUtils.FindClose(SR);
end;
 
if ts.count = 1 then
begin
if fileexists(GebeLinieaus(ParamZeile, 1)) then
begin
openfile(GebeLinieaus(ParamZeile, 1), '', true);
 
if mode = tcDecrypted then
begin
// Datei verschlüsseln
if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+1);
edt_passwort2.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+1);
try
m_encrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
 
if mode = tcEncrypted then
begin
// Datei oder Ordner entschlüsseln
if lowercase(extractfileext(ausgabegesetzt)) = lowercase(ExtDC4) then
ausgabegesetzt := copy(ausgabegesetzt, 0, length(ausgabegesetzt)-length(ExtDC4)); // Ausgabe darf nicht .dc4 haben!
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+1);
try
m_decrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
end
else if directoryexists(GebeLinieaus(ParamZeile, 1)) then
begin
// Ordner verschlüsseln
openfolder(GebeLinieaus(ParamZeile, 1));
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+1);
edt_passwort2.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+1);
if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
try
m_encrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
end
else
begin
// Dateiliste soll angelegt werden
m_dateiensammlung_neu.Click;
for i := 0 to ts.Count - 1 do
begin
addtozip(ts.Strings[i], fileopen);
end;
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+1);
edt_passwort2.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+1);
if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
try
m_encrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
finally
ts.Free;
end;
end;
end
else
begin
// Dateiliste soll angelegt werden
m_dateiensammlung_neu.Click;
for i := 1 to paramzeile_firstposition('/c') - 1 do
begin
addtozip(dlg_open_element.filename, fileopen);
end;
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+1);
edt_passwort2.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/c')+1);
if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
try
m_encrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
close;
end
 
// Der Unterschied von /x zu /c ist, dass openfile() anders reagiert und die checkbox chk_securedelete anwählt
else if (paramzeile_firstposition('/x') <> -1) then
begin
GetDir(0, arbeitsverzeichnis);
ausgabegesetzt := arbeitsverzeichnis+'\'+GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+2);
if paramzeile_firstposition('/x') = 2 then
begin
// 1 Datei soll geöffnet werden
if not fileexists(GebeLinieaus(ParamZeile, 1)) and not directoryexists(GebeLinieaus(ParamZeile, 1)) then
begin
errorlevel := 9; // Datei oder Ordner nicht gefunden.
end
else
begin
ts := tstringlist.Create;
try
if FindFirst(GebeLinieaus(ParamZeile, 1), faAnyFile, SR) = 0 then
try
repeat
ts.Add(sr.Name);
until FindNext(SR) <> 0;
finally
SysUtils.FindClose(SR);
end;
 
if ts.count = 1 then
begin
if fileexists(GebeLinieaus(ParamZeile, 1)) then
begin
openfile(GebeLinieaus(ParamZeile, 1), '', true);
 
if mode = tcDecrypted then
begin
// Datei verschlüsseln
if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+1);
edt_passwort2.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+1);
try
m_encrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
 
if mode = tcEncrypted then
begin
// Datei oder Ordner entschlüsseln
if lowercase(extractfileext(ausgabegesetzt)) = lowercase(ExtDC4) then
ausgabegesetzt := copy(ausgabegesetzt, 0, length(ausgabegesetzt)-length(ExtDC4)); // Ausgabe darf nicht .dc4 haben!
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+1);
try
m_decrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
end
else if directoryexists(GebeLinieaus(ParamZeile, 1)) then
begin
// Ordner verschlüsseln
openfolder(GebeLinieaus(ParamZeile, 1));
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+1);
edt_passwort2.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+1);
if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
try
m_encrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
end
else
begin
// Dateiliste soll angelegt werden
m_dateiensammlung_neu.Click;
for i := 0 to ts.Count - 1 do
begin
addtozip(ts.Strings[i], fileopen);
end;
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+1);
edt_passwort2.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+1);
if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
try
m_encrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
finally
ts.Free;
end;
end;
end
else
begin
// Dateiliste soll angelegt werden
m_dateiensammlung_neu.Click;
for i := 1 to paramzeile_firstposition('/x') - 1 do
begin
addtozip(dlg_open_element.filename, fileopen);
end;
edt_passwort.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+1);
edt_passwort2.Text := GebeLinieaus(ParamZeile, paramzeile_firstposition('/x')+1);
if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
try
m_encrypt.Click;
except
// Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
// bleiben, deswegen der Try-Except-Block.
errorlevel := 2; // Fehler bei Ver/Entschlüsselung
end;
end;
close;
end
 
// Dateien löschen
else if (lowercase(GebeLinieaus(ParamZeile, 2)) = '/e') then
begin
if (ZaehleLinien(ParamZeile) = 2) or ((ZaehleLinien(ParamZeile) = 3) and (GebeLinieaus(ParamZeile, 3) = '/notsilent')) then
begin
 
ts := tstringlist.Create;
try
if FindFirst(GebeLinieaus(ParamZeile, 1), faAnyFile, SR) = 0 then
try
repeat
ts.add(sr.name);
until FindNext(SR) <> 0;
finally
SysUtils.FindClose(SR);
end;
 
if ts.count = 1 then
begin
// 1 Datei
if directoryexists(GebeLinieaus(ParamZeile, 1)) then
begin
dc_deletedir(GebeLinieaus(ParamZeile, 1));
if directoryexists(GebeLinieaus(ParamZeile, 1)) then
begin
if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
Application.MessageBox(pchar(GetLangEntry('delerror')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR)
else
errorlevel := 8; // Datei oder Ordner konnte nicht oder nur teilweise entfernt werden.
end
else if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
Application.MessageBox(pchar(GetLangEntry('delok')), pchar(GetLangEntry('information')), MB_OK + MB_ICONINFORMATION)
end
else if fileexists(GebeLinieaus(ParamZeile, 1)) then
begin
dc_deletefile(GebeLinieaus(ParamZeile, 1));
if fileexists(GebeLinieaus(ParamZeile, 1)) then
begin
if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
Application.MessageBox(pchar(GetLangEntry('delerror')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR)
else
errorlevel := 8; // Datei oder Ordner konnte nicht oder nur teilweise entfernt werden.
end
else if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
Application.MessageBox(pchar(GetLangEntry('delok')), pchar(GetLangEntry('information')), MB_OK + MB_ICONINFORMATION)
end
else
begin
if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
Application.MessageBox(pchar(GetLangEntry('fileorfoldernotfound')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR)
else
errorlevel := 9; // Datei oder Ordner nicht gefunden.
end;
end
else
begin
// Wildcard verwendet
fehler := false;
for i := 0 to ts.count - 1 do
begin
if fileexists(ts.strings[i]) then
dc_deletefile(ts.strings[i]);
if directoryexists(ts.strings[i]) then
dc_deletedir(ts.strings[i]);
 
if (fileexists(ts.strings[i]) or directoryexists(ts.strings[i])) and
(GebeLinieaus(ParamZeile, 3) = '/notsilent') then
begin
fehler := true;
end;
end;
 
if fehler then
Application.MessageBox(pchar(GetLangEntry('delerror')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR)
end;
finally
ts.free;
end;
 
end
else
begin
errorlevel := 3; // Falsche Syntax
end;
close;
end
 
// Mehrere Dateien öffnen
else
begin
show;
 
steuerelementesperren(true);
zeige_wartenform(true);
try
 
try
kazip.close;
except
 
end;
 
if fileexists(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip) then deletefile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
CreateZipFile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
for i := 1 to ZaehleLinien(ParamZeile) do
begin
addtozip(GebeLinieaus(ParamZeile, i), GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip)
end;
 
openfile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip, GetLangEntry('dateiensammlung'), true);
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
 
application.Restore;
application.BringToFront;
end;
end
else
begin
show;
 
ts := tstringlist.Create;
try
if FindFirst(GebeLinieaus(ParamZeile, 1), faAnyFile, SR) = 0 then
try
repeat
ts.Add(sr.Name);
until FindNext(SR) <> 0;
finally
SysUtils.FindClose(SR);
end;
 
if ts.Count = 1 then
begin
// 1 Datei öffnen
if fileexists(GebeLinieaus(ParamZeile, 1)) then
begin
steuerelementesperren(true);
zeige_wartenform(true);
try
openfile(GebeLinieaus(ParamZeile, 1), '', false);
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end
else if directoryexists(GebeLinieaus(ParamZeile, 1)) then
begin
steuerelementesperren(true);
zeige_wartenform(true);
try
openfolder(GebeLinieaus(ParamZeile, 1));
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
end
else if ts.Count > 1 then
begin
// Dateiliste soll angelegt werden
 
steuerelementesperren(true);
zeige_wartenform(true);
try
 
m_dateiensammlung_neu.Click;
for i := 0 to ts.count - 1 do
begin
addtozip(ts.Strings[i], fileopen);
end;
 
finally
steuerelementesperren(false);
zeige_wartenform(false);
end;
end;
finally
ts.free;
end;
 
application.Restore;
application.BringToFront;
end;
end;
 
procedure TMainForm.CreateZipFile(zipfile: string);
begin
// kazip.CreateZip(zipfile);
 
try
ZippingStream := TFileStream.Create(zipfile, fmOpenReadWrite or fmCreate);
try
KAZip.CreateZip(ZippingStream);
finally
ZippingStream.Free;
end;
except
 
end;
end;
 
procedure TMainForm.addtozip(fileorfolder, zipfile: string);
begin
try
kazip.close;
except
 
end;
 
DateienImOrdner := 0;
if directoryexists(fileorfolder) then
DateienImOrdner := NumberOfFiles(fileorfolder);
if fileexists(fileorfolder) then
DateienImOrdner := 1;
DateienCounter := 0;
 
kazip.Open(zipfile);
try
try
if fileexists(fileorfolder) then
kazip.AddFile(fileorfolder, extractfilename(fileorfolder));
if directoryexists(fileorfolder) then
kazip.AddFolder(fileorfolder, extractfilepath(fileorfolder), '*', true);
except
 
end;
finally
kazip.Close;
end;
end;
 
// von OneInst
procedure TMainForm.Start;
var
lpData: Pointer;
cbData: DWORD;
begin
lpData := ParamStrToBlob(cbData);
try
ProcessCommandline(lpData);
finally
FreeMemory(lpData);
end;
end;
 
end.
/trunk/Quelltext/SecureMoveExt.bdsproj
0,0 → 1,182
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType">VCLApplication</Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{281D38CE-12FE-4572-9616-B700222E76CA}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">SecureMoveExt.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">8</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">1</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">0</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">0</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">1</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">0</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="GenerateHpps">False</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">False</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription"></Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath">..\VCL_DRAGDROP;..\VCL_DEC</Directories>
<Directories Name="Packages">vcl;vclx;VclSmp;vcldb;vclado60;Ibevnt;Vclbde60;vcldbx;qrpt;teeui;teedb;tee;dss;teeqr;vclib;Vclmid60;vclie;inetdb;inet;nmfast;webmid60;dclocx60;Vclsql60;dclaxserver60;MenuBands;DragDropD6</Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication">c:\winnt\explorer.exe</Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000406</Language>
<Language Name="RootDir"></Language>
</Language>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1030</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription"></VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys> <Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclib100.bpl">Borland InterBase Express Components</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyCore100.bpl">Indy 10 Core Design Time</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclsmp100.bpl">Borland Sample Components</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyProtocols100.bpl">Indy 10 Protocols Design Time</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dcltee100.bpl">TeeChart-Komponenten</Excluded_Packages>
<Excluded_Packages Name="C:\Programme\ComponentAce\AbsoluteDatabase\Lib\Delphi 2006 and C++ Builder 2006\dclAbsDbd10.bpl">Absolute Database - Design package</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
</BorlandProject>
/trunk/Quelltext/SecureMoveExt.cfg
0,0 → 1,42
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-LN"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-U"..\VCL_DRAGDROP;..\VCL_DEC"
-O"..\VCL_DRAGDROP;..\VCL_DEC"
-I"..\VCL_DRAGDROP;..\VCL_DEC"
-R"..\VCL_DRAGDROP;..\VCL_DEC"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST
/trunk/Quelltext/SecureMoveExt.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/SecureMoveExt.dpr
0,0 → 1,16
library SecureMoveExt;
 
uses
ComServ,
SecureMoveMain in 'SecureMoveMain.pas' {DataModuleDragDropHandler: TDataModule};
 
{$R SecureMoveExt.res}
 
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
 
begin
end.
/trunk/Quelltext/SecureMoveExt.dproj
0,0 → 1,105
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{281d38ce-12fe-4572-9616-b700222e76ca}</ProjectGuid>
<MainSource>SecureMoveExt.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>SecureMoveExt.dll</DCC_DependencyCheckOutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_UnitSearchPath>..\VCL_DRAGDROP;..\VCL_DEC</DCC_UnitSearchPath>
<DCC_ResourcePath>..\VCL_DRAGDROP;..\VCL_DEC</DCC_ResourcePath>
<DCC_ObjPath>..\VCL_DRAGDROP;..\VCL_DEC</DCC_ObjPath>
<DCC_IncludePath>..\VCL_DRAGDROP;..\VCL_DEC</DCC_IncludePath>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_UnitSearchPath>..\VCL_DRAGDROP;..\VCL_DEC</DCC_UnitSearchPath>
<DCC_ResourcePath>..\VCL_DRAGDROP;..\VCL_DEC</DCC_ResourcePath>
<DCC_ObjPath>..\VCL_DRAGDROP;..\VCL_DEC</DCC_ObjPath>
<DCC_IncludePath>..\VCL_DRAGDROP;..\VCL_DEC</DCC_IncludePath>
<DCC_Define>DEBUG</DCC_Define>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType>VCLApplication</Borland.ProjectType>
<BorlandProject>
<BorlandProject xmlns=""> <Delphi.Personality> <Parameters>
<Parameters Name="HostApplication">c:\winnt\explorer.exe</Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<Language>
<Language Name="ProjectLang">$00000406</Language>
</Language>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1030</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription"></VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
<Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclib100.bpl">Borland InterBase Express Components</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyCore100.bpl">Indy 10 Core Design Time</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclsmp100.bpl">Borland Sample Components</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyProtocols100.bpl">Indy 10 Protocols Design Time</Excluded_Packages>
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dcltee100.bpl">TeeChart-Komponenten</Excluded_Packages>
<Excluded_Packages Name="C:\Programme\ComponentAce\AbsoluteDatabase\Lib\Delphi 2006 and C++ Builder 2006\dclAbsDbd10.bpl">Absolute Database - Design package</Excluded_Packages>
</Excluded_Packages>
<Source>
<Source Name="MainSource">SecureMoveExt.dpr</Source>
</Source>
</Delphi.Personality> </BorlandProject></BorlandProject>
</ProjectExtensions>
<ItemGroup />
<ItemGroup>
<DelphiCompile Include="SecureMoveExt.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="SecureMoveMain.pas">
<Form>DataModuleDragDropHandler</Form>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
</Project>
/trunk/Quelltext/SecureMoveExt.rc
0,0 → 1,28
1 VERSIONINFO
FILEVERSION 4,1,0,0
PRODUCTVERSION 4,1,0,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "00000000"
{
VALUE "CompanyName", "ViaThinkSoft\0"
VALUE "FileDescription", "(De)Coder Secure-Move-Extension\0"
VALUE "FileVersion", "1.0.0.0\0"
VALUE "InternalName", "DC4 SecureMoveExt\0"
VALUE "LegalCopyright", "© Copyright 2001 - 2007 ViaThinkSoft\0"
VALUE "OriginalFilename", "SecureMoveExt.dll\0"
VALUE "ProductName", "(De)Coder\0"
VALUE "ProductVersion", "4.1.0.0\0"
VALUE "Projektleiter", "Daniel Marschall - www.daniel-marschall.de\0"
VALUE "Webseite", "www.viathinksoft.de\0"
}
}
 
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0000 0x0000
}
}
/trunk/Quelltext/SecureMoveExt.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/SecureMoveMain.dfm
0,0 → 1,19
object DataModuleDragDropHandler: TDataModuleDragDropHandler
OldCreateOrder = False
OnCreate = DataModuleCreate
OnDestroy = DataModuleDestroy
Height = 156
Width = 215
object PopupMenu1: TPopupMenu
Left = 24
Top = 16
object MenuEncrypt: TMenuItem
Caption = '?'
Hint = '?'
OnClick = MenuEncryptClick
end
object MenuLine1: TMenuItem
Caption = '-'
end
end
end
/trunk/Quelltext/SecureMoveMain.pas
0,0 → 1,307
unit SecureMoveMain;
 
interface
 
uses
DragDropHandler, SysUtils, IniFiles, Menus, ShellAPI, Windows, Classes,
ComServ, ComObj, Registry, Forms, ShlObj, ComCtrls;
 
{$ifndef VER13_PLUS}
type
TDataModule = TForm;
{$endif}
 
type
TDataModuleDragDropHandler = class(TDataModule, IUnknown, IShellExtInit, IContextMenu)
PopupMenu1: TPopupMenu;
MenuEncrypt: TMenuItem;
MenuLine1: TMenuItem;
procedure MenuEncryptClick(Sender: TObject);
procedure DragDropHandler1Popup(Sender: TObject);
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private
FFiles: TStrings;
DragDropHandler1: TDragDropHandler;
procedure MoveFile(const Filename: string);
public
property ContextMenuHandler: TDragDropHandler read DragDropHandler1
implements IShellExtInit, IContextMenu;
end;
 
implementation
 
{$R *.DFM}
 
type
TDragDropHandlerFactoryAbs = class(TDragDropHandlerFactory)
public
procedure UpdateRegistry(Register: boolean); override;
end;
 
const
CLSID_DragDropHandler: TGUID = '{54069E5A-C471-4B68-835C-FC845E64040B}';
 
var
sTitle: string;
sDescription: string;
langini: TIniFile;
path: string;
mydocuments: string;
 
resourcestring
sFileClass = 'Folder';
sFileExtension = '';
sClassName = 'SecureMove';
 
function ExecuteWithExitCode(filename, params, dir: string): integer;
var
proc_info: TProcessInformation;
startinfo: TStartupInfo;
ExitCode: longword;
begin
FillChar(proc_info, sizeof(TProcessInformation), 0);
FillChar(startinfo, sizeof(TStartupInfo), 0);
startinfo.cb := sizeof(TStartupInfo);
 
if CreateProcess(nil, pchar(Format('"%s" %s', [filename, TrimRight(pchar(params))])), nil,
nil, false, NORMAL_PRIORITY_CLASS, nil, pchar(path),
startinfo, proc_info) <> False then
begin
// WaitForSingleObject(proc_info.hProcess, INFINITE);
while WaitForSingleObject(proc_info.hProcess, 0) = WAIT_TIMEOUT do
begin
// ProcessMessages(0);
Sleep(50);
end;
GetExitCodeProcess(proc_info.hProcess, ExitCode);
CloseHandle(proc_info.hThread);
CloseHandle(proc_info.hProcess);
result := ExitCode;
end
else
begin
result := -1;
end;
end;
 
procedure TDragDropHandlerFactoryAbs.UpdateRegistry(Register: boolean);
var
ClassID: string;
begin
ClassID := GUIDToString(CLSID_DragDropHandler);
 
if Register then
begin
inherited UpdateRegistry(Register);
 
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved', True);
WriteString(ClassID, '(De)Coder-SecureMove');
CloseKey;
finally
Free;
end;
end
else
begin
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved', True);
DeleteValue(ClassID);
CloseKey;
finally
Free;
end;
 
inherited UpdateRegistry(Register);
end;
end;
 
// http://www.delphipraxis.net/topic1451_dateioperationen+mit+shfileoperation.html
function DoFileWork(aOperation: FILEOP_FLAGS; aFrom, aTo: AnsiString;
Flags: FILEOP_FLAGS): Integer;
var
FromPath, ToPath: AnsiString;
SHFileOpStruct: TSHFileOpStruct;
begin
FromPath := aFrom + #0#0;
ToPath := aTo + #0#0;
with SHFileOpStruct do
begin
Wnd := 0;
wFunc := aOperation;
pFrom := PAnsiChar(FromPath);
if ToPath <> '' then
begin
pTo := PAnsiChar(ToPath)
end else begin // target available
pTo := nil;
end; // target not available
fFlags := Flags;
end; // structure
Result := SHFileOperationA(SHFileOpStruct);
end;
 
procedure TDataModuleDragDropHandler.DataModuleCreate(Sender: TObject);
begin
FFiles := TStringList.Create;
DragDropHandler1 := TDragDropHandler.Create(self);
DragDropHandler1.OnPopup := DragDropHandler1Popup;
DragDropHandler1.ContextMenu := popupmenu1;
popupmenu1.Items.Items[0].Hint := sDescription;
popupmenu1.Items.Items[0].Caption := sTitle;
end;
 
procedure TDataModuleDragDropHandler.DataModuleDestroy(Sender: TObject);
begin
FFiles.Free;
DragDropHandler1.free;
end;
 
procedure TDataModuleDragDropHandler.MoveFile(const Filename: string);
var
delform: TForm;
ani: TAnimate;
cd: integer;
begin
// undo ist leider nicht möglich, weil es sich um keine move-aktion handelt
cd := DoFileWork(FO_COPY, Filename, DragDropHandler1.Folder+'\'+extractfilename(Filename), 0);
if cd = 0 then
begin
delform := TForm.Create(nil);
try
delform.caption := langini.ReadString('SecureMove', 'wait', '?');
delform.BorderStyle := bsSingle;
delform.BorderIcons := [biSystemMenu];
delform.Position := poDesktopCenter;
 
ani := TAnimate.Create(delform);
try
ani.Parent := delform;
ani.CommonAVI := aviDeleteFile;
ani.Active := true;
ani.Top := 8;
ani.Left := 8;
ani.Visible := true;
 
delform.ClientWidth := ani.Width + 16;
delform.ClientHeight := ani.Height + 16;
delform.visible := true;
 
// shellexecute(handle, 'open', pchar(path+'Coder.exe'), pchar('"'+Filename+'" /e'), pchar(path), SW_NORMAL);
if ExecuteWithExitCode(path+'Coder.exe', '"'+Filename+'" /e', path) = 8 then
begin
Messagebox(handle, pchar(Format(
langini.ReadString('SecureMove', 'error_del', '?'),
[Filename]
)), pchar(langini.ReadString('ShlErase', 'error', '?')), MB_ICONERROR or MB_OK);
end;
finally
ani.free;
end;
finally
delform.Free;
end;
end
else
begin
// fehlercodes für abbruch beim überschreiben: 138, 7
Messagebox(handle, pchar(Format(
langini.ReadString('SecureMove', 'error_copy', '?'),
[Filename, DragDropHandler1.Folder+'\', cd]
)), pchar(langini.ReadString('ShlErase', 'error', '?')), MB_ICONERROR or MB_OK);
end;
end;
 
procedure TDataModuleDragDropHandler.MenuEncryptClick(Sender: TObject);
var
i: integer;
begin
for i := 0 to FFiles.Count-1 do
MoveFile(FFiles[i]);
end;
 
procedure TDataModuleDragDropHandler.DragDropHandler1Popup(Sender: TObject);
 
procedure ClearItem(Item: TMenuItem);
begin
{$ifdef VER13_PLUS}
Item.Clear;
{$else}
while (Item.Count > 0) do
Item[0].Free;
{$endif}
end;
 
var
i: integer;
begin
FFiles.Assign(DragDropHandler1.Files);
 
for i := 0 to FFiles.Count-1 do
begin
// AUSNAHMEN - KEIN VERSCHIEBEN MÖGLICH
if // nicht-existierendes (z.b. arbeitsplatz)
(not fileexists(ffiles.Strings[i]) and not directoryexists(ffiles.Strings[i])) or
// "eigene dateien"-ordner
(uppercase(ffiles.Strings[i]) = uppercase(mydocuments)) or
// innerhalb des selben orderns verschieben
(DragDropHandler1.Folder+'\' = extractfilepath(ffiles.Strings[i])) or
// verzeichnis in sich selbst kopieren
(ffiles.Strings[i] = DragDropHandler1.Folder) or
// unbekannt
(FFiles.Count = 0) then
begin
ClearItem(PopupMenu1.Items);
end;
end;
end;
 
initialization
path := '';
mydocuments := '';
 
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\(De)Coder_is1');
path := ReadString('InstallLocation');
CloseKey;
if path = '' then
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\(De)Coder_is1');
path := ReadString('InstallLocation');
CloseKey;
end;
 
RootKey := HKEY_CURRENT_USER;
OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders');
mydocuments := ReadString('Personal');
CloseKey;
finally
free;
end;
 
if copy(mydocuments, length(mydocuments), 1) = '\' then
mydocuments := copy(mydocuments, 0, length(mydocuments)-1);
 
langini := TIniFile.Create(path+'Language.ini');
 
sTitle := langini.ReadString('SecureMove', 'title', '?');
sDescription := langini.ReadString('SecureMove', 'description', '?');
 
TDragDropHandlerFactoryAbs.Create(ComServer, TDataModuleDragDropHandler,
CLSID_DragDropHandler, sClassName, sDescription, sFileClass,
sFileExtension, ciMultiInstance);
 
finalization
langini.Free;
end.
 
/trunk/Quelltext/ShellEraseMain.pas
0,0 → 1,283
unit ShellEraseMain;
 
interface
 
uses
ComServ, SysUtils, ShellAPI, Windows, Registry, ActiveX, ComObj, ShlObj,
Graphics, classes, inifiles;
 
const
GUID_TDFKontextMenuShellExt: TGUID = '{6B422248-BB90-4682-A128-F088E99AB520}';
 
type
TDFKontextMenuShellExt = class(TComObject, IShellExtInit, IContextMenu)
protected
function IShellExtInit.Initialize = SEInitialize;
function SEInitialize(pidlFolder: PItemIDList; lpdobj: IDataObject; hKeyProgID: HKEY): HResult; stdcall;
function QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, idCmdLast, uflags: UINT): HResult; stdcall;
function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; stdcall;
function GetCommandString(idCmd, uType: UINT; pwReserved: PUINT; pszName: LPSTR; cchMax: UINT): HResult; stdcall;
end;
 
implementation
 
var
hBmp: TBitmap;
handle: hwnd;
vsl: tstringlist;
path: string;
langini: TIniFile;
 
type
TDFKontextMenuShellExtFactory = class(TComObjectFactory)
public
procedure UpdateRegistry(Register: boolean); override;
end;
 
function TDFKontextMenuShellExt.GetCommandString(idCmd, uType: UINT; pwReserved: PUINT;
pszName: LPSTR; cchMax: UINT): HResult;
begin
try
if (idCmd = 0) then
begin
if (uType = GCS_HELPTEXT) then
StrCopy(pszName, pchar(langini.ReadString('ShlErase', 'openwith', '?')));
 
Result := NOERROR;
end
else
Result := E_INVALIDARG;
except
Result := E_UNEXPECTED;
end;
end;
 
procedure ProcessMessages(hWnd: DWORD);
var
Msg: TMsg;
begin
while PeekMessage(Msg, hWnd, 0, 0, PM_REMOVE) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
 
function ExecuteWithExitCode(filename, params, dir: string): integer;
var
proc_info: TProcessInformation;
startinfo: TStartupInfo;
ExitCode: longword;
begin
FillChar(proc_info, sizeof(TProcessInformation), 0);
FillChar(startinfo, sizeof(TStartupInfo), 0);
startinfo.cb := sizeof(TStartupInfo);
 
if CreateProcess(nil, pchar(Format('"%s" %s', [filename, TrimRight(pchar(params))])), nil,
nil, false, NORMAL_PRIORITY_CLASS, nil, pchar(path),
startinfo, proc_info) <> False then
begin
// WaitForSingleObject(proc_info.hProcess, INFINITE);
while WaitForSingleObject(proc_info.hProcess, 0) = WAIT_TIMEOUT do
begin
ProcessMessages(0);
Sleep(50);
end;
GetExitCodeProcess(proc_info.hProcess, ExitCode);
CloseHandle(proc_info.hThread);
CloseHandle(proc_info.hProcess);
result := ExitCode;
end
else
begin
result := -1;
end;
end;
 
function TDFKontextMenuShellExt.InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult;
var
i, res: integer;
fehler: boolean;
begin
Result := E_FAIL;
if (HiWord(Integer(lpici.lpVerb)) <> 0) then
Exit;
 
if not (LoWord(lpici.lpVerb) in [0, 1, 2]) then
begin
Result := E_INVALIDARG;
Exit;
end;
 
res := Messagebox(handle, pchar(langini.ReadString('ShlErase', 'sicherheitsfrage', '?')), pchar(langini.ReadString('ShlErase', 'sicherheitsfragecaption', '?')), MB_ICONQUESTION or MB_YESNO);
 
if res = ID_YES then
begin
if not fileexists(path+'Coder.exe') then
Messagebox(handle, pchar(langini.ReadString('ShlErase', 'codermissing', '?')), pchar(langini.ReadString('ShlErase', 'error', '?')), MB_ICONERROR or MB_OK)
else
begin
fehler := false;
for i := 0 to vsl.count-1 do
begin
// ShellExecute(handle, 'open', PChar(path+'Coder.exe'), PChar('"'+vsl.Strings[i]+'" /e /notsilent'), pchar(path), SW_NORMAL);
if ExecuteWithExitCode(path+'Coder.exe', '"'+vsl.Strings[i]+'" /e', path) = 8 then
fehler := true;
end;
if fehler then
MessageBox(handle, pchar(langini.ReadString('ShlErase', 'delerror', '?')), pchar(langini.ReadString('ShlErase', 'error', '?')), MB_OK + MB_ICONERROR)
else
MessageBox(handle, pchar(langini.ReadString('ShlErase', 'delok', '?')), pchar(langini.ReadString('ShlErase', 'information', '?')), MB_OK + MB_ICONINFORMATION);
end;
end;
 
Result := NOERROR;
end;
 
function TDFKontextMenuShellExt.QueryContextMenu(Menu: HMENU; indexMenu,
idCmdFirst, idCmdLast, uflags: UINT): HResult;
begin
Result := 0;
if ((uFlags and $0000000F) = CMF_NORMAL) or
((uFlags and CMF_EXPLORE) <> 0) or
((uFlags and CMF_VERBSONLY <> 0)) then
begin
InsertMenu(Menu, indexMenu, MF_STRING or MF_BYPOSITION, idCmdFirst, pchar(langini.readstring('ShlErase', 'context', '?')));
if hBmp.Handle <> 0 then
SetMenuItemBitmaps(Menu, indexMenu, MF_BYPOSITION, hBmp.Handle, hBmp.Handle);
Result := 1;
end;
end;
 
function TDFKontextMenuShellExt.SEInitialize(pidlFolder: PItemIDList;
lpdobj: IDataObject; hKeyProgID: HKEY): HResult;
var
StgMedium: TStgMedium;
FormatEtc: TFormatEtc;
FFileName: array[0..MAX_PATH] of Char;
i: Integer;
begin
if (lpdobj = nil) then
begin
Result := E_INVALIDARG;
Exit;
end;
 
with FormatEtc do
begin
cfFormat := CF_HDROP;
ptd := nil;
dwAspect := DVASPECT_CONTENT;
lindex := -1;
tymed := TYMED_HGLOBAL;
end;
 
Result := lpdobj.GetData(FormatEtc, StgMedium);
if Failed(Result) then
Exit;
 
vsl := tstringlist.Create;
 
vSL.Clear;
for i := 0 to DragQueryFile(StgMedium.hGlobal, $FFFFFFFF, nil, 0) - 1 do
begin
DragQueryFile(StgMedium.hGlobal, i, FFileName, SizeOf(FFileName));
vSl.Add(FFileName);
end;
ReleaseStgMedium(StgMedium);
Result := NOERROR;
end;
 
procedure TDFKontextMenuShellExtFactory.UpdateRegistry(Register: boolean);
var
ClassID: string;
begin
ClassID := GUIDToString(GUID_TDFKontextMenuShellExt);
 
if Register then
begin
inherited UpdateRegistry(Register);
 
CreateRegKey('Folder\shellex', '', '');
CreateRegKey('Folder\shellex\ContextMenuHandlers', '', '');
CreateRegKey('Folder\shellex\ContextMenuHandlers\(De)Coder-Erase', '', ClassID);
 
CreateRegKey('*\shellex', '', '');
CreateRegKey('*\shellex\ContextMenuHandlers', '', '');
CreateRegKey('*\shellex\ContextMenuHandlers\(De)Coder-Erase', '', ClassID);
 
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved', True);
WriteString(ClassID, '(De)Coder-Erase');
CloseKey;
finally
Free;
end;
end
else
begin
DeleteRegKey('Folder\shellex\ContextMenuHandlers\(De)Coder-Erase');
DeleteRegKey('Folder\shellex\ContextMenuHandlers');
DeleteRegKey('Folder\shellex');
 
DeleteRegKey('*\shellex\ContextMenuHandlers\(De)Coder-Erase');
DeleteRegKey('*\shellex\ContextMenuHandlers');
DeleteRegKey('*\shellex');
 
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved', True);
DeleteValue(ClassID);
CloseKey;
finally
Free;
end;
 
inherited UpdateRegistry(Register);
end;
end;
 
initialization
// Initialisierung
TDFKontextMenuShellExtFactory.Create(ComServer, TDFKontextMenuShellExt, GUID_TDFKontextMenuShellExt,
'', '(De)Coder Eraser', ciMultiInstance, tmApartment);
hBmp := TBitmap.Create;
hBmp.LoadFromResourceName(hInstance, 'KONTEXTICON');
 
path := '';
 
// Pfad ermitteln
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\(De)Coder_is1');
path := ReadString('InstallLocation');
CloseKey;
if path = '' then
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\(De)Coder_is1');
path := ReadString('InstallLocation');
CloseKey;
end;
finally
free;
end;
 
// Language.ini öffnen
langini := TIniFile.Create(path+'Language.ini');
 
finalization
hBmp.Free;
langini.Free;
end.
 
/trunk/Quelltext/ShellExtMain.pas
0,0 → 1,231
unit ShellExtMain;
 
interface
 
uses
ComServ, SysUtils, ShellAPI, Windows, Registry, ActiveX, ComObj, ShlObj,
Graphics, classes, inifiles;
 
const
GUID_TDFKontextMenuShellExt: TGUID = '{C30DC498-38EA-4DED-8AD4-E302CE094892}';
 
type
TDFKontextMenuShellExt = class(TComObject, IShellExtInit, IContextMenu)
protected
function IShellExtInit.Initialize = SEInitialize;
function SEInitialize(pidlFolder: PItemIDList; lpdobj: IDataObject; hKeyProgID: HKEY): HResult; stdcall;
function QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, idCmdLast, uflags: UINT): HResult; stdcall;
function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; stdcall;
function GetCommandString(idCmd, uType: UINT; pwReserved: PUINT; pszName: LPSTR; cchMax: UINT): HResult; stdcall;
end;
 
implementation
 
var
hBmp: TBitmap;
handle: hwnd;
vsl: tstringlist;
path: string;
langini: TIniFile;
 
type
TDFKontextMenuShellExtFactory = class(TComObjectFactory)
public
procedure UpdateRegistry(Register: boolean); override;
end;
 
function TDFKontextMenuShellExt.GetCommandString(idCmd, uType: UINT; pwReserved: PUINT;
pszName: LPSTR; cchMax: UINT): HResult;
begin
try
if (idCmd = 0) then
begin
if (uType = GCS_HELPTEXT) then
StrCopy(pszName, pchar(langini.ReadString('ShlExt', 'openwith', '?')));
 
Result := NOERROR;
end
else
Result := E_INVALIDARG;
except
Result := E_UNEXPECTED;
end;
end;
 
function TDFKontextMenuShellExt.InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult;
var
i: integer;
para: string;
begin
Result := E_FAIL;
if (HiWord(Integer(lpici.lpVerb)) <> 0) then
Exit;
 
if not (LoWord(lpici.lpVerb) in [0, 1, 2]) then
begin
Result := E_INVALIDARG;
Exit;
end;
 
if not fileexists(path+'Coder.exe') then
Messagebox(handle, pchar(langini.ReadString('ShlExt', 'codermissing', '?')), pchar(langini.ReadString('ShlExt', 'error', '?')), MB_ICONERROR or MB_OK)
else
begin
para := '';
for i := 0 to vsl.count - 1 do
para := para + '"'+vsl.strings[i]+'" ';
para := copy(para, 0, length(para)-1);
 
ShellExecute(handle, 'open', PChar(path+'Coder.exe'), PChar(para), pchar(path), SW_NORMAL);
end;
 
Result := NOERROR;
end;
 
function TDFKontextMenuShellExt.QueryContextMenu(Menu: HMENU; indexMenu,
idCmdFirst, idCmdLast, uflags: UINT): HResult;
begin
Result := 0;
if ((uFlags and $0000000F) = CMF_NORMAL) or
((uFlags and CMF_EXPLORE) <> 0) or
((uFlags and CMF_VERBSONLY <> 0)) then
begin
InsertMenu(Menu, indexMenu, MF_STRING or MF_BYPOSITION, idCmdFirst, pchar(langini.readstring('ShlExt', 'context', '?')));
 
if hBmp.Handle <> 0 then
SetMenuItemBitmaps(Menu, indexMenu, MF_BYPOSITION, hBmp.Handle, hBmp.Handle);
Result := 1;
end;
end;
 
function TDFKontextMenuShellExt.SEInitialize(pidlFolder: PItemIDList;
lpdobj: IDataObject; hKeyProgID: HKEY): HResult;
var
StgMedium: TStgMedium;
FormatEtc: TFormatEtc;
FFileName: array[0..MAX_PATH] of Char;
i: Integer;
begin
if (lpdobj = nil) then
begin
Result := E_INVALIDARG;
Exit;
end;
 
with FormatEtc do
begin
cfFormat := CF_HDROP;
ptd := nil;
dwAspect := DVASPECT_CONTENT;
lindex := -1;
tymed := TYMED_HGLOBAL;
end;
 
Result := lpdobj.GetData(FormatEtc, StgMedium);
if Failed(Result) then
Exit;
 
vsl := tstringlist.Create;
 
vSL.Clear;
for i := 0 to DragQueryFile(StgMedium.hGlobal, $FFFFFFFF, nil, 0) - 1 do
begin
DragQueryFile(StgMedium.hGlobal, i, FFileName, SizeOf(FFileName));
vSl.Add(FFileName);
end;
ReleaseStgMedium(StgMedium);
Result := NOERROR;
end;
 
procedure TDFKontextMenuShellExtFactory.UpdateRegistry(Register: boolean);
var
ClassID: string;
begin
ClassID := GUIDToString(GUID_TDFKontextMenuShellExt);
 
if Register then
begin
inherited UpdateRegistry(Register);
 
CreateRegKey('Folder\shellex', '', '');
CreateRegKey('Folder\shellex\ContextMenuHandlers', '', '');
CreateRegKey('Folder\shellex\ContextMenuHandlers\(De)Coder', '', ClassID);
 
CreateRegKey('*\shellex', '', '');
CreateRegKey('*\shellex\ContextMenuHandlers', '', '');
CreateRegKey('*\shellex\ContextMenuHandlers\(De)Coder', '', ClassID);
 
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved', True);
WriteString(ClassID, '(De)Coder');
CloseKey;
finally
Free;
end;
end
else
begin
DeleteRegKey('Folder\shellex\ContextMenuHandlers\(De)Coder');
DeleteRegKey('Folder\shellex\ContextMenuHandlers');
DeleteRegKey('Folder\shellex');
 
DeleteRegKey('*\shellex\ContextMenuHandlers\(De)Coder');
DeleteRegKey('*\shellex\ContextMenuHandlers');
DeleteRegKey('*\shellex');
 
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved', True);
DeleteValue(ClassID);
CloseKey;
finally
Free;
end;
 
inherited UpdateRegistry(Register);
end;
end;
 
initialization
// Initialisierung
TDFKontextMenuShellExtFactory.Create(ComServer, TDFKontextMenuShellExt, GUID_TDFKontextMenuShellExt,
'', '(De)Coder', ciMultiInstance, tmApartment);
hBmp := TBitmap.Create;
hBmp.LoadFromResourceName(hInstance, 'KONTEXTICON');
 
path := '';
 
// Pfad ermitteln
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\(De)Coder_is1');
path := ReadString('InstallLocation');
CloseKey;
if path = '' then
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\(De)Coder_is1');
path := ReadString('InstallLocation');
CloseKey;
end;
finally
free;
end;
 
// Language.ini öffnen
langini := TIniFile.Create(path+'Language.ini');
 
finalization
hBmp.Free;
langini.Free;
end.
 
/trunk/Quelltext/ShlErase.RES
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/ShlErase.bdsproj
0,0 → 1,175
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{F49BFD49-FE0D-41D8-82AC-55B6FA8D9879}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">ShlErase.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">8</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">1</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">0</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">0</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">1</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">0</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">False</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription"></Linker>
<Linker Name="GenerateHpps">False</Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath"></Directories>
<Directories Name="Packages"></Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription"></VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000000</Language>
<Language Name="RootDir"></Language>
</Language>
</Delphi.Personality>
</BorlandProject>
/trunk/Quelltext/ShlErase.cfg
0,0 → 1,38
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-LN"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST
/trunk/Quelltext/ShlErase.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/ShlErase.dpr
0,0 → 1,17
library ShlErase;
 
uses
Windows,
ComServ,
ShellEraseMain in 'ShellEraseMain.pas';
 
{$R ShlErase.res}
 
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
 
begin
end.
/trunk/Quelltext/ShlErase.dproj
0,0 → 1,70
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{f49bfd49-fe0d-41d8-82ac-55b6fa8d9879}</ProjectGuid>
<MainSource>ShlErase.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>ShlErase.dll</DCC_DependencyCheckOutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_Define>DEBUG</DCC_Define>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType />
<BorlandProject>
<BorlandProject xmlns=""> <Delphi.Personality> <Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription"></VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
<Source>
<Source Name="MainSource">ShlErase.dpr</Source>
</Source>
</Delphi.Personality> </BorlandProject></BorlandProject>
</ProjectExtensions>
<ItemGroup />
<ItemGroup>
<DelphiCompile Include="ShlErase.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="ShellEraseMain.pas" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
</Project>
/trunk/Quelltext/ShlErase.rc
0,0 → 1,30
KONTEXTICON BITMAP "Ressourcen\ShlErase\Kontexticon.bmp"
 
1 VERSIONINFO
FILEVERSION 4,1,0,0
PRODUCTVERSION 4,1,0,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "00000000"
{
VALUE "CompanyName", "ViaThinkSoft\0"
VALUE "FileDescription", "(De)Coder Shell-Erase-Extension\0"
VALUE "FileVersion", "1.0.0.0\0"
VALUE "InternalName", "DC4 ShlErase\0"
VALUE "LegalCopyright", "© Copyright 2001 - 2007 ViaThinkSoft\0"
VALUE "OriginalFilename", "ShlErase.dll\0"
VALUE "ProductName", "(De)Coder\0"
VALUE "ProductVersion", "4.1.0.0\0"
VALUE "Projektleiter", "Daniel Marschall - www.daniel-marschall.de\0"
VALUE "Webseite", "www.viathinksoft.de\0"
}
}
 
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0000 0x0000
}
}
/trunk/Quelltext/ShlExt.RES
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/ShlExt.bdsproj
0,0 → 1,175
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{F49BFD49-FE0D-41D8-82AC-55B6FA8D9879}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">ShlExt.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">8</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">1</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">0</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">0</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">1</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">0</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">False</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription"></Linker>
<Linker Name="GenerateHpps">False</Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath"></Directories>
<Directories Name="Packages"></Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription"></VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000000</Language>
<Language Name="RootDir"></Language>
</Language>
</Delphi.Personality>
</BorlandProject>
/trunk/Quelltext/ShlExt.cfg
0,0 → 1,38
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-LN"D:\Eigene Dateien\Borland Studio-Projekte\Bpl"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST
/trunk/Quelltext/ShlExt.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/ShlExt.dpr
0,0 → 1,17
library ShellExt;
 
uses
Windows,
ComServ,
ShellExtMain in 'ShellExtMain.pas';
 
{$R ShlExt.res}
 
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
 
begin
end.
/trunk/Quelltext/ShlExt.dproj
0,0 → 1,70
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{f49bfd49-fe0d-41d8-82ac-55b6fa8d9879}</ProjectGuid>
<MainSource>ShlExt.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>ShlExt.dll</DCC_DependencyCheckOutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_Define>DEBUG</DCC_Define>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType />
<BorlandProject>
<BorlandProject xmlns=""> <Delphi.Personality> <Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription"></VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
<Source>
<Source Name="MainSource">ShlExt.dpr</Source>
</Source>
</Delphi.Personality> </BorlandProject></BorlandProject>
</ProjectExtensions>
<ItemGroup />
<ItemGroup>
<DelphiCompile Include="ShlExt.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="ShellExtMain.pas" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
</Project>
/trunk/Quelltext/ShlExt.rc
0,0 → 1,30
KONTEXTICON BITMAP "Ressourcen\ShlExt\Kontexticon.bmp"
 
1 VERSIONINFO
FILEVERSION 4,1,0,0
PRODUCTVERSION 4,1,0,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "00000000"
{
VALUE "CompanyName", "ViaThinkSoft\0"
VALUE "FileDescription", "(De)Coder Shell-Extension\0"
VALUE "FileVersion", "1.0.0.0\0"
VALUE "InternalName", "DC4 ShlExt\0"
VALUE "LegalCopyright", "© Copyright 2001 - 2007 ViaThinkSoft\0"
VALUE "OriginalFilename", "ShlExt.dll\0"
VALUE "ProductName", "(De)Coder\0"
VALUE "ProductVersion", "4.1.0.0\0"
VALUE "Projektleiter", "Daniel Marschall - www.daniel-marschall.de\0"
VALUE "Webseite", "www.viathinksoft.de\0"
}
}
 
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0000 0x0000
}
}
/trunk/Quelltext/Warten.dfm
0,0 → 1,71
object WartenForm: TWartenForm
Left = 0
Top = 0
BorderIcons = []
BorderStyle = bsSingle
Caption = 'Bitte warten...'
ClientHeight = 149
ClientWidth = 425
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
FormStyle = fsStayOnTop
OldCreateOrder = False
Position = poMainFormCenter
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object lbl_wait: TLabel
Left = 8
Top = 19
Width = 91
Height = 29
Caption = 'lbl_wait'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -24
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
Transparent = True
end
object lbl_info1: TLabel
Left = 8
Top = 104
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object lbl_info2: TLabel
Left = 8
Top = 120
Width = 7
Height = 13
Caption = '#'
Transparent = True
end
object pbr_progress: TProgressBar
Left = 8
Top = 64
Width = 409
Height = 33
Max = 10000
Smooth = True
TabOrder = 0
end
object btn_escape: TButton
Left = 296
Top = 116
Width = 121
Height = 25
Cancel = True
Caption = '#'
TabOrder = 1
Visible = False
OnClick = btn_escapeClick
end
end
/trunk/Quelltext/Warten.pas
0,0 → 1,84
unit Warten;
 
interface
 
uses
Windows, Messages, SysUtils, Forms, IniFiles, Controls, Classes,
ComCtrls, StdCtrls, DCConst, ExtCtrls,
dialogs;
 
type
TWartenForm = class(TForm)
pbr_progress: TProgressBar;
lbl_wait: TLabel;
lbl_info1: TLabel;
lbl_info2: TLabel;
btn_escape: TButton;
procedure btn_escapeClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
LangArray: array of TLanguageEntry;
function GetLangEntry(name: string): string;
end;
 
var
WartenForm: TWartenForm;
 
implementation
 
uses Main;
 
{$R *.dfm}
 
function TWartenForm.GetLangEntry(name: string): string;
var
i: integer;
begin
for i := 0 to high(LangArray) do
begin
if LangArray[i].name = name then
begin
result := LangArray[i].text;
break;
end;
end;
end;
 
procedure TWartenForm.btn_escapeClick(Sender: TObject);
begin
mainform.close;
end;
 
procedure TWartenForm.FormCreate(Sender: TObject);
var
ini: TIniFile;
str: TStringList;
i: integer;
begin
// Sprachdatei auslesen
 
ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Language.ini');
str := TStringList.Create();
try
ini.ReadSection(Name, str);
for i := 0 to str.count-1 do
begin
setlength(LangArray, length(LangArray)+1);
LangArray[length(LangArray)-1].name := str.strings[i];
LangArray[length(LangArray)-1].text := ini.ReadString(name, str.strings[i], '?');
LangArray[length(LangArray)-1].text := StringReplace(LangArray[length(LangArray)-1].text, '###', #13#10, [rfReplaceAll]);
end;
finally
ini.free;
str.Free;
end;
 
// Formular vorbereiten
 
lbl_wait.Caption := GetLangEntry('wait');
btn_escape.Caption := GetLangEntry('exit');
 
lbl_wait.Left := clientwidth div 2 - lbl_wait.Width div 2;
end;
 
end.
/trunk/Quelltext/WindowsXP.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/funktionsweise_1.GIF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/funktionsweise_2.GIF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/funktionsweise_3.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Quelltext/style.css
0,0 → 1,24
body
{
background:#FFFFFF;
font-family:Arial;
font-size:15;
}
 
a
{
color:#008000;
}
 
.ueberschrift
{
color:#0000DD;
font-weight:bold;
font-size:23;
}
 
.titel
{
color:#FF0000;
font-size:26;
}