/trunk/DosLineConv/PosEx.pas |
---|
0,0 → 1,371 |
unit PosEx; |
// © 1997-2005 by FNS Enterprize's |
// 2003-2005 by himitsu @ Delphi-PRAXiS |
// http://www.delphipraxis.net/topic61002,0,asc,0.html |
interface |
Function _Pos (Const SubStr, S: AnsiString): LongInt; overload; |
Function _Pos (Const SubStr, S: WideString): LongInt; overload; |
Function _PosEx (Const SubStr, S: AnsiString; Offset: LongInt = 1): LongInt; overload; |
Function _PosEx (Const SubStr, S: WideString; Offset: LongInt = 1): LongInt; overload; |
Function CountString(Const SubStr, S: AnsiString): Word; overload; |
Function CountString(Const SubStr, S: WideString): Word; overload; |
implementation |
Function _Pos(Const SubStr, S: AnsiString): LongInt; |
ASM |
PUSH ESI |
PUSH EDI |
PUSH EBX |
TEST &SubStr, &SubStr |
JE @Exit |
TEST &S, &S |
JE @Exit0 |
MOV ESI, &SubStr |
MOV EDI, &S |
PUSH EDI |
MOV ECX, [EDI - 4] |
MOV EDX, [ESI - 4] |
DEC EDX |
JS @Fail |
MOV AL, [ESI] |
INC ESI |
SUB ECX, EDX |
JLE @Fail |
@Loop: |
REPNE SCASB |
JNE @Fail |
MOV EBX, ECX |
PUSH ESI |
PUSH EDI |
MOV ECX, EDX |
REPE CMPSB |
POP EDI |
POP ESI |
JE @Found |
MOV ECX, EBX |
JMP @Loop |
@Fail: |
POP EDX |
@Exit0: |
XOR EAX, EAX |
JMP @Exit |
@Found: |
POP EDX |
MOV EAX, EDI |
SUB EAX, EDX |
@Exit: |
POP EBX |
POP EDI |
POP ESI |
End; |
Function _Pos(Const SubStr, S: WideString): LongInt; |
ASM |
PUSH ESI |
PUSH EDI |
PUSH EBX |
TEST &SubStr, &SubStr |
JE @Exit |
TEST &S, &S |
JE @Exit0 |
MOV ESI, &SubStr |
MOV EDI, &S |
PUSH EDI |
MOV ECX, [EDI - 4] |
SAL EAX, 1 |
MOV EDX, [ESI - 4] |
SAL EDX, 1 |
DEC EDX |
JS @Fail |
MOV AX, [ESI] |
ADD ESI, 2 |
SUB ECX, EDX |
JLE @Fail |
@Loop: |
REPNE SCASW |
JNE @Fail |
MOV EBX, ECX |
PUSH ESI |
PUSH EDI |
MOV ECX, EDX |
REPE CMPSW |
POP EDI |
POP ESI |
JE @Found |
MOV ECX, EBX |
JMP @Loop |
@Fail: |
POP EDX |
@Exit0: |
XOR EAX, EAX |
JMP @Exit |
@Found: |
POP EDX |
MOV EAX, EDI |
SUB EAX, EDX |
SHR EAX, 1 |
@Exit: |
POP EBX |
POP EDI |
POP ESI |
End; |
Function _PosEx(Const SubStr, S: AnsiString; Offset: LongInt = 1): LongInt; |
ASM |
PUSH ESI |
PUSH EDI |
PUSH EBX |
TEST &SubStr, &SubStr |
JE @Exit |
TEST &S, &S |
JE @Exit0 |
TEST &Offset, &Offset |
JG @POff |
MOV &Offset, 1 |
@POff: |
MOV ESI, &SubStr |
MOV EDI, &S |
PUSH EDI |
MOV EAX, &Offset |
DEC EAX |
MOV ECX, [EDI - 4] |
MOV EDX, [ESI - 4] |
DEC EDX |
JS @Fail |
SUB ECX, EAX |
ADD EDI, EAX |
MOV AL, [ESI] |
INC ESI |
SUB ECX, EDX |
JLE @Fail |
@Loop: |
REPNE SCASB |
JNE @Fail |
MOV EBX, ECX |
PUSH ESI |
PUSH EDI |
MOV ECX, EDX |
REPE CMPSB |
POP EDI |
POP ESI |
JE @Found |
MOV ECX, EBX |
JMP @Loop |
@Fail: |
POP EDX |
@Exit0: |
XOR EAX, EAX |
JMP @Exit |
@Found: |
POP EDX |
MOV EAX, EDI |
SUB EAX, EDX |
@Exit: |
POP EBX |
POP EDI |
POP ESI |
End; |
Function _PosEx(Const SubStr, S: WideString; Offset: LongInt = 1): LongInt; |
ASM |
PUSH ESI |
PUSH EDI |
PUSH EBX |
TEST &SubStr, &SubStr |
JE @Exit |
TEST &S, &S |
JE @Exit0 |
TEST &Offset, &Offset |
JG @POff |
MOV &Offset, 1 |
@POff: |
MOV ESI, &SubStr |
MOV EDI, &S |
PUSH EDI |
PUSH &Offset |
MOV ECX, [EDI - 4] |
SAL ECX, 1 |
MOV EDX, [ESI - 4] |
SAL EDX, 1 |
POP EAX |
DEC EAX |
DEC EDX |
JS @Fail |
SUB ECX, EAX |
ADD EDI, EAX |
ADD EDI, EAX |
MOV AX, [ESI] |
ADD ESI, 2 |
SUB ECX, EDX |
JLE @Fail |
@Loop: |
REPNE SCASW |
JNE @Fail |
MOV EBX, ECX |
PUSH ESI |
PUSH EDI |
MOV ECX, EDX |
REPE CMPSW |
POP EDI |
POP ESI |
JE @Found |
MOV ECX, EBX |
JMP @Loop |
@Fail: |
POP EDX |
@Exit0: |
XOR EAX, EAX |
JMP @Exit |
@Found: |
POP EDX |
MOV EAX, EDI |
SUB EAX, EDX |
SHR EAX, 1 |
@Exit: |
POP EBX |
POP EDI |
POP ESI |
End; |
Function CountString(Const SubStr, S: AnsiString): Word; |
ASM |
PUSH ESI |
PUSH EDI |
PUSH EBX |
TEST &SubStr, &SubStr |
JE @Exit |
TEST &S, &S |
JE @Exit0 |
MOV ESI, &SubStr |
MOV EDI, &S |
PUSH EDI |
MOV ECX, [EDI - 4] |
MOV EDX, [ESI - 4] |
DEC EDX |
JS @Fail |
XOR EAX, EAX |
MOV AL, [ESI] |
INC ESI |
SUB ECX, EDX |
JLE @Fail |
@Loop: |
REPNE SCASB |
JNE @Ready |
MOV EBX, ECX |
PUSH ESI |
PUSH EDI |
MOV ECX, EDX |
REPE CMPSB |
POP EDI |
POP ESI |
JNE @noInc |
CMP EAX, $FFFF0000 |
JAE @Ready |
ADD EAX, $00010000 |
@noInc: |
MOV ECX, EBX |
JMP @Loop |
@Fail: |
POP EDX |
@Exit0: |
XOR EAX, EAX |
JMP @Exit |
@Ready: |
POP EDX |
SHR EAX, 16 |
@Exit: |
POP EBX |
POP EDI |
POP ESI |
End; |
Function CountString(Const SubStr, S: WideString): Word; |
ASM |
PUSH ESI |
PUSH EDI |
PUSH EBX |
TEST &SubStr, &SubStr |
JE @Exit |
TEST &S, &S |
JE @Exit0 |
MOV ESI, &SubStr |
MOV EDI, &S |
PUSH EDI |
MOV ECX, [EDI - 4] |
SAL ECX, 1 |
MOV EDX, [ESI - 4] |
SAL EDX, 1 |
DEC EDX |
JS @Fail |
XOR EAX, EAX |
MOV AX, [ESI] |
ADD ESI, 2 |
SUB ECX, EDX |
JLE @Fail |
@Loop: |
REPNE SCASW |
JNE @Ready |
MOV EBX, ECX |
PUSH ESI |
PUSH EDI |
MOV ECX, EDX |
REPE CMPSW |
POP EDI |
POP ESI |
JNE @noInc |
CMP EAX, $FFFF0000 |
JAE @Ready |
ADD EAX, $00010000 |
@noInc: |
MOV ECX, EBX |
JMP @Loop |
@Fail: |
POP EDX |
@Exit0: |
XOR EAX, EAX |
JMP @Exit |
@Ready: |
POP EDX |
SHR EAX, 16 |
@Exit: |
POP EBX |
POP EDI |
POP ESI |
End; |
end. |
/trunk/DosLineConv/BinarySafeReplace.pas |
---|
0,0 → 1,114 |
unit BinarySafeReplace; |
// BinarySafeReplace.pas |
// Version 1.1 |
// by Daniel Marschall |
// http://www.delphipraxis.net/post778431.html |
interface |
uses |
StrUtils, SysUtils, Classes; |
// Binary-Safe. Der Parameter AString wird direkt ersetzt. |
// Die Anzahl der durchgefühten Ersetzungen wird als Ergebnis zurückgegeben. |
function StringReplacesBinarySafe(var AString: string; const ASearchPattern, AReplaceWith: string): integer; |
// Direkter Ersatz für StringReplace(), Binary-Safe. |
// Veränderter String wird als Eregebnis zurückgegeben. |
function StringReplaceBinarySafe(const AString, ASearchPattern, AReplaceWith: string): string; |
// BinarySafeReplaceFileContents |
// Die Anzahl der durchgefühten Ersetzungen wird als Ergebnis zurückgegeben. |
function BinarySafeReplaceFileContents(const AInputFile, AOutputFile, ASearchPattern, AReplaceWith: string): integer; |
implementation |
uses |
PosEx; |
function StringReplacesBinarySafe(var AString: string; const ASearchPattern, AReplaceWith: string): integer; |
var |
iPos: Integer; |
lastpos: Integer; |
ueberhang: integer; |
begin |
result := 0; |
if AString = '' then exit; |
if ASearchPattern = '' then exit; |
UniqueString(AString); // Referenzzählung beachten. Dank an shmia für den Hinweis. |
ueberhang := length(AReplaceWith) - length(ASearchPattern); |
lastpos := 1; |
while true do |
begin |
iPos := _PosEx(ASearchPattern, AString, lastpos); |
if iPos <= 0 then break; |
if result = 7 then |
if Pred(iPos) > Length(AString) - Length(AReplaceWith) + 1 {Bugfix, Added +1. Ersetzungen am StringEnde} then break; |
if ueberhang > 0 then |
begin |
setlength(AString, length(AString)+ueberhang); |
Move(AString[iPos], AString[iPos+ueberhang], length(AString)-iPos); // Bugfix: Hier stand length(AString)-iPos-1 |
end; |
Move(AReplaceWith[1], AString[iPos], Length(AReplaceWith)); |
if ueberhang < 0 then |
begin |
Move(AString[iPos+length(ASearchPattern)], AString[iPos+length(AReplaceWith)], length(AString)-iPos-length(AReplaceWith)); |
setlength(AString, length(AString)+ueberhang); |
ueberhang := -1; |
end; |
lastpos := iPos + ueberhang + 1; |
inc(result); |
end; |
end; |
function StringReplaceBinarySafe(const AString, ASearchPattern, AReplaceWith: string): string; |
var |
tmp: string; |
begin |
tmp := AString; |
StringReplacesBinarySafe(tmp, ASearchPattern, AReplaceWith); |
result := tmp; |
end; |
function BinarySafeReplaceFileContents(const AInputFile, AOutputFile, ASearchPattern, AReplaceWith: string): integer; |
var |
fst: TFileStream; |
str: string; |
begin |
result := -1; |
if not FileExists(AInputFile) then exit; |
if not ForceDirectories(ExtractFilePath(AOutputFile)) then exit; |
fst := TFileStream.Create(AInputFile, fmOpenRead or fmShareDenyWrite); |
try |
fst.Position := 0; |
setlength(str, fst.Size); |
fst.Read(str[1], fst.Size); |
finally |
fst.free; |
end; |
result := StringReplacesBinarySafe(str, ASearchPattern, AReplaceWith); |
fst := TFileStream.Create(AOutputFile, fmCreate); |
try |
fst.Position := 0; |
fst.Write(str[1], length(str)); |
finally |
fst.free; |
end; |
end; |
end. |
/trunk/DosLineConv/DosLineConv.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"C:\Dokumente und Einstellungen\Daniel Marschall\Eigene Dateien\Borland Studio-Projekte\Bpl" |
-LN"C:\Dokumente und Einstellungen\Daniel Marschall\Eigene Dateien\Borland Studio-Projekte\Bpl" |
-w-UNSAFE_TYPE |
-w-UNSAFE_CODE |
-w-UNSAFE_CAST |
/trunk/DosLineConv/DosLineConv.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/DosLineConv/DosLineConv.bdsproj |
---|
0,0 → 1,175 |
<?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">{DB936C93-3752-4262-8D86-6EEA3B4C7FE2}</Option> |
</Option> |
</PersonalityInfo> |
<Delphi.Personality> |
<Source> |
<Source Name="MainSource">DosLineConv.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/DosLineConv/DosLineConv.dpr |
---|
0,0 → 1,109 |
program DosLineConv; |
uses |
SysUtils, |
Classes, |
Dialogs, |
Windows, |
BinarySafeReplace in 'BinarySafeReplace.pas', |
PosEx in 'PosEx.pas'; |
{$R *.res} |
var |
f: string; |
const |
target_format = #13#10; |
type |
EMoveError = class(Exception); |
resourcestring |
lng_file_not_found = 'The file "%s" was not found!'; |
lng_is_a_dir = 'MD5 checksum can only calculated for files.'; |
lng_binary_error = 'File "%s" has binary contents! You should only edit ASCII files.'; |
lng_syntax = 'Syntax: %s filename'; |
lng_error = 'An error occoured! Probably the file can''t be overwritten.'; |
procedure NormalizeLineBreaks(f, seq: string); |
var |
t: string; |
begin |
t := f+'~'; // Zwischenschritte schonen die Originaldatei (z.B. bei Fehlern) |
DeleteFile(PChar(t)); |
BinarySafeReplaceFileContents(f, t, #13#10, #13); // Windows format |
// BinarySafeReplaceFileContents(t, t, #10#13, #13); |
BinarySafeReplaceFileContents(t, t, #10, #13); // MAC format |
BinarySafeReplaceFileContents(t, t, #13, seq); // Linux format |
DeleteFile(PChar(f)); |
if not MoveFile(PChar(t), PChar(f)) then |
begin |
DeleteFile(PChar(t)); |
raise EMoveError.Create(lng_error); |
end; |
end; |
function IsBinaryFile(f: string): boolean; |
var |
Stream: TStream; |
b: Byte; |
begin |
result := false; |
Stream := TFileStream.Create(f, fmOpenRead); |
try |
while Stream.Read(b, SizeOf(b)) > 0 do |
begin |
if (b <= 31) and (b <> 9) and (b <> 10) and (b <> 13) then |
begin |
result := true; |
Exit; |
end; |
end; |
finally |
Stream.Free; |
end; |
end; |
var |
i: integer; |
begin |
if ParamCount() < 1 then |
begin |
ShowMessageFmt(lng_syntax, [ExtractFileName(ParamStr(0))]); |
Exit; |
end; |
for i := 1 to ParamCount() do |
begin |
f := ParamStr(i); |
if DirectoryExists(f) then |
begin |
ShowMessage(lng_is_a_dir); |
end |
else |
begin |
if not FileExists(f) then |
begin |
ShowMessageFmt(lng_file_not_found, [f]); |
end |
else |
begin |
if IsBinaryFile(f) then |
begin |
ShowMessageFmt(lng_binary_error, [f]); |
end |
else |
begin |
try |
NormalizeLineBreaks(f, #13#10); |
except |
ShowMessage(lng_error); |
end; |
end; |
end; |
end; |
end; |
end. |
/trunk/DosLineConv/DosLineConv.dof |
---|
0,0 → 1,87 |
[FileVersion] |
Version=6.0 |
[Compiler] |
A=8 |
B=0 |
C=1 |
D=1 |
E=0 |
F=0 |
G=1 |
H=1 |
I=1 |
J=0 |
K=0 |
L=1 |
M=0 |
N=1 |
O=1 |
P=1 |
Q=0 |
R=0 |
S=0 |
T=0 |
U=0 |
V=1 |
W=0 |
X=1 |
Y=1 |
Z=1 |
ShowHints=1 |
ShowWarnings=1 |
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
[Linker] |
MapFile=0 |
OutputObjs=0 |
ConsoleApp=1 |
DebugInfo=0 |
RemoteSymbols=0 |
MinStackSize=16384 |
MaxStackSize=1048576 |
ImageBase=4194304 |
ExeDescription= |
[Directories] |
OutputDir= |
UnitOutputDir= |
PackageDLLOutputDir= |
PackageDCPOutputDir= |
SearchPath= |
Packages= |
Conditionals= |
DebugSourceDirs= |
UsePackages=0 |
[Parameters] |
RunParams= |
HostApplication= |
Launcher= |
UseLauncher=0 |
DebugCWD= |
[Language] |
ActiveLang= |
ProjectLang= |
RootDir= |
[Version Info] |
IncludeVerInfo=0 |
AutoIncBuild=0 |
MajorVer=1 |
MinorVer=0 |
Release=0 |
Build=0 |
Debug=0 |
PreRelease=0 |
Special=0 |
Private=0 |
DLL=0 |
Locale=1031 |
CodePage=1252 |
[Version Info Keys] |
CompanyName= |
FileDescription= |
FileVersion=1.0.0.0 |
InternalName= |
LegalCopyright= |
LegalTrademarks= |
OriginalFilename= |
ProductName= |
ProductVersion=1.0.0.0 |
Comments= |
/trunk/DosLineConv/DosLineConv.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 |