Bu unit program webserver araçları işleminde kullanılır.
Kod: Tümünü seç
unit ads_wbserver_util;
{Copyright(c)2000 Advanced Delphi Systems
Richard Maley
Advanced Delphi Systems
12613 Maidens Bower Drive
Potomac, MD 20854 USA
phone 301-840-1554
maley@advdelphisys.com
The code herein can be used or modified by anyone. Please retain references
to Richard Maley at Advanced Delphi Systems. If you make improvements to the
code please send your improvements to maley@advdelphisys.com so that the
entire Delphi community can benefit. All comments are welcome.
}
interface
Uses Classes, SysUtils, FileCtrl;
{!~ Converts an integer value to its binary equivalent
as a ShortString }
Function ConvertIntegerToBinaryString(Int, Length : Integer) : ShortString;
{!~ Converts a word value to its binary equivalent
as a ShortString }
Function ConvertWordToBinaryString(InputWord : Word; Length : Integer) : ShortString;
{!~ Returns the name aof a filed from a list where values are arranged
as FieldName=FiledValue}
Function FieldNameFromList(lst : TStringList; index : Integer): String;
{!~ Populates a TStrings FileList with the files meeting selected
file attribute criteria in a directory. The mask argument is a
standard DOS file argument like '*.*. The InclDotFiles argument
allows the user to exclude the system files "." and ".." by
setting the value to False. If the Intersection argument is set
to true then the result will reflect only those files that satisfy
all attribute criteria. If Intersection is set to false then the
result will be a union of files that meet any of the criteria.}
Function FilesInDirDetail(
FileList : TStrings;
Directory : String;
Mask : String;
Intersection: Boolean;
IsReadOnly : Boolean;
IsHidden : Boolean;
IsSystem : Boolean;
IsVolumeID : Boolean;
IsDirectory : Boolean;
IsArchive : Boolean;
IsNormal : Boolean;
InclDotFiles: Boolean): Boolean;
{!~ Throws away all keys except 0-9,-,+,.}
Procedure KeyPressOnlyNumbers(Var Key: Char);
{!~ Throws away all keys except 0-9}
Procedure KeyPressOnlyNumbersAbsolute(Var Key: Char);
{!~ Throws away all characters except 0-9,-,+,.}
Function NumbersOnly(InputString: String): String;
{!~ Throws away all characters except 0-9}
Function NumbersOnlyAbsolute(InputString: String): String;
{!~ Pads or truncates a String and Justifies Left if StrJustify=True}
Function StringPad(
InputStr,
FillChar: String;
StrLen: Integer;
StrJustify: Boolean): String;
{!~ Formats and validates values based on FieldType. If Value is completely
invalid for the type then an empty string is retruned.}
Function ValidateStrFieldType(FieldType,Value : String): String;
implementation
{!~ Converts an integer value to its binary equivalent
as a ShortString }
Function ConvertIntegerToBinaryString(Int, Length : Integer) : ShortString;
Begin
Result := ConvertWordToBinaryString(Word(Int),Length);
End;
{!~ Converts a word value to its binary equivalent
as a ShortString }
Function ConvertWordToBinaryString(InputWord : Word; Length : Integer) : ShortString;
var
Counter, Number : Cardinal;
D : Array[0..1] of Char;
Begin
D[0] := '0';
D[1] := '1';
Number := 1;
Result[0] := #16;
For Counter := 15 Downto 0 Do
Begin
Result[Number] :=
D[Ord(InputWord and (1 shl Counter) <> 0)];
Inc(Number);
End;
If Length > 16 Then Length := 16;
If Length < 1 Then Length := 1;
Result := Copy(Result,16-Length,Length);
End;
{!~ Populates a TStrings FileList with the files meeting selected
file attribute criteria in a directory. The mask argument is a
standard DOS file argument like '*.*. The InclDotFiles argument
allows the user to exclude the system files "." and ".." by
setting the value to False. If the Intersection argument is set
to true then the result will reflect only those files that satisfy
all attribute criteria. If Intersection is set to false then the
result will be a union of files that meet any of the criteria.}
Function FilesInDirDetail(
FileList : TStrings;
Directory : String;
Mask : String;
Intersection: Boolean;
IsReadOnly : Boolean;
IsHidden : Boolean;
IsSystem : Boolean;
IsVolumeID : Boolean;
IsDirectory : Boolean;
IsArchive : Boolean;
IsNormal : Boolean;
InclDotFiles: Boolean): Boolean;
var
j : Integer;
MaskPtr : PChar;
Ptr : PChar;
FileInfo : TSearchRec;
CurDir : String;
FileType : TFileType;
FileType_I : Integer;
FileType_B : ShortString;
TSList : TStringList;
BinaryAttr : ShortString;
ShouldAdd : Boolean;
begin
{ Result := False;}{zzz}
TSList := TStringList.Create();
Try
Try
FileType := [];
If IsReadOnly Then FileType := (FileType + [ftReadOnly]);
If IsHidden Then FileType := (FileType + [ftHidden]);
If IsSystem Then FileType := (FileType + [ftSystem]);
If IsVolumeID Then FileType := (FileType + [ftVolumeID]);
If IsDirectory Then FileType := (FileType + [ftDirectory]);
If IsArchive Then FileType := (FileType + [ftArchive]);
If IsNormal Then FileType := (FileType + [ftNormal]);
FileType_I := 0;
If IsReadOnly Then FileType_I := (FileType_I + 1);
If IsHidden Then FileType_I := (FileType_I + 2);
If IsSystem Then FileType_I := (FileType_I + 4);
If IsVolumeID Then FileType_I := (FileType_I + 8);
If IsDirectory Then FileType_I := (FileType_I + 16);
If IsArchive Then FileType_I := (FileType_I + 32);
If IsNormal Then FileType_I := (FileType_I + 128);
FileType_B := ConvertIntegerToBinaryString(FileType_I,8);
TSList.Clear;
GetDir(0,CurDir);
ChDir(Directory); { go to the directory we want }
FileList.Clear; { clear the list }
MaskPtr := PChar(Mask);
while MaskPtr <> nil do
begin
Ptr := StrScan (MaskPtr, ';');
If Ptr <> nil Then Ptr^ := #0;
If FindFirst(MaskPtr, 191, FileInfo) = 0 Then
Begin
Repeat { exclude normal files if ftNormal not set }
Begin
If ftNormal in FileType Then
Begin
TSList.Add(FileInfo.Name);
End
Else
Begin
BinaryAttr := ConvertIntegerToBinaryString(FileInfo.Attr,8);
If Intersection Then
Begin
ShouldAdd := True;
For j := 1 To 8 Do
Begin
If (FileType_B[j]='1') And (BinaryAttr[j]<>'1') Then
Begin
ShouldAdd := False;
Break;
End;
End;
If ShouldAdd Then
TSList.Add(FileInfo.Name);
End
Else
Begin
For j := 1 To 8 Do
Begin
If (FileType_B[j]='1') And (BinaryAttr[j]='1') Then
Begin
TSList.Add(FileInfo.Name);
Break;
End;
End;
End;
End;
End;
Until FindNext(FileInfo) <> 0;
{zzz Changed 4/17/99 rlm}
//FindClose(FileInfo.FindHandle);
FindClose(FileInfo);
End;
If Ptr <> nil then
begin
Ptr^ := ';';
Inc (Ptr);
end;
MaskPtr := Ptr;
end;
ChDir(CurDir);
TSList.Sorted := False;
If Not InclDotFiles Then
Begin
If TSList.IndexOf('.') > -1 Then
TSLIst.Delete(TSList.IndexOf('.'));
If TSList.IndexOf('..') > -1 Then
TSLIst.Delete(TSList.IndexOf('..'));
End;
TSList.Sorted := True;
TSList.Sorted := False;
FileList.Assign(TSList);
Result := True;
Except
Result := False;
End;
Finally
TSList.Free;
End;
end;
{!~ Pads or truncates a String and Justifies Left if StrJustify=True}
Function StringPad(
InputStr,
FillChar: String;
StrLen: Integer;
StrJustify: Boolean): String;
Var
TempFill: String;
Counter : Integer;
Begin
If Not (Length(InputStr) = StrLen) Then
Begin
If Length(InputStr) > StrLen Then
Begin
InputStr := Copy(InputStr,1,StrLen);
End
Else
Begin
TempFill := '';
For Counter := 1 To StrLen-Length(InputStr) Do
Begin
TempFill := TempFill + FillChar;
End;
If StrJustify Then
Begin
{Left Justified}
InputStr := InputStr + TempFill;
End
Else
Begin
{Right Justified}
InputStr := TempFill + InputStr ;
End;
End;
End;
Result := InputStr;
End;
{!~ Throws away all keys except 0-9,-,+,.}
Procedure KeyPressOnlyNumbers(Var Key: Char);
Begin
Case Key Of
'0': Exit;
'1': Exit;
'2': Exit;
'3': Exit;
'4': Exit;
'5': Exit;
'6': Exit;
'7': Exit;
'8': Exit;
'9': Exit;
'-': Exit;
'+': Exit;
'.': Exit;
#8 : Exit; {Backspace}
End;
Key := #0; {Throw the key away}
End;
{!~ Throws away all keys except 0-9}
Procedure KeyPressOnlyNumbersAbsolute(Var Key: Char);
Begin
Case Key Of
'0': Exit;
'1': Exit;
'2': Exit;
'3': Exit;
'4': Exit;
'5': Exit;
'6': Exit;
'7': Exit;
'8': Exit;
'9': Exit;
#8 : Exit; {Backspace}
End;
Key := #0; {Throw the key away}
End;
{!~ Throws away all characters except 0-9,-,+,.}
Function NumbersOnly(InputString: String): String;
Var
NewString: String;
L : Integer;
i : Integer;
C : Char;
Begin
Result := InputString;
NewString := '';
L := Length(InputString);
For i:= 1 To L Do
Begin
C := InputString[i];
KeyPressOnlyNumbers(C);
If Not (C = #0) Then
Begin
NewString := NewString + C;
End;
End;
Result := NewString;
End;
{!~ Throws away all characters except 0-9}
Function NumbersOnlyAbsolute(InputString: String): String;
Var
NewString: String;
L : Integer;
i : Integer;
C : Char;
Begin
Result := InputString;
NewString := '';
L := Length(InputString);
For i:= 1 To L Do
Begin
C := InputString[i];
If Not(
(C='+') Or
(C='-') Or
(C='.') Or
(C=',')) Then
Begin
KeyPressOnlyNumbers(C);
If Not (C = #0) Then
Begin
If NewString = '0' Then NewString := '';
NewString := NewString + C;
End;
End;
End;
Result := NewString;
End;
{!~ Formats and validates values based on FieldType. If Value is completely
invalid for the type then an empty string is retruned.}
Function ValidateStrFieldType(FieldType,Value : String): String;
Var
sgTemp : String;
Begin
FieldType := UpperCase(FieldType);
Result := '';
//Cannot Validate
If FieldType = 'ADT' Then Begin Result := ''; Exit; End;
If FieldType = 'ARRAY' Then Begin Result := ''; Exit; End;
If FieldType = 'BCD' Then Begin Result := ''; Exit; End;
If FieldType = 'BLOB' Then Begin Result := ''; Exit; End;
If FieldType = 'CURSOR' Then Begin Result := ''; Exit; End;
If FieldType = 'DATASET' Then Begin Result := ''; Exit; End;
If FieldType = 'DBASEOLE' Then Begin Result := ''; Exit; End;
If FieldType = 'GRAPHIC' Then Begin Result := ''; Exit; End;
If FieldType = 'PARADOXOLE' Then Begin Result := ''; Exit; End;
If FieldType = 'REFERENCE' Then Begin Result := ''; Exit; End;
If FieldType = 'TYPEDBINARY' Then Begin Result := ''; Exit; End;
If FieldType = 'UNKNOWN' Then Begin Result := ''; Exit; End;
//Just return what was sent in
If FieldType = 'BYTES' Then Begin Result := Value; Exit; End;
If FieldType = 'FIXEDCHAR' Then Begin Result := Value; Exit; End;
If FieldType = 'FMTMEMO' Then Begin Result := Value; Exit; End;
If FieldType = 'MEMO' Then Begin Result := Value; Exit; End;
If FieldType = 'STRING' Then Begin Result := Value; Exit; End;
If FieldType = 'VARBYTES' Then Begin Result := Value; Exit; End;
If FieldType = 'WIDESTRING' Then Begin Result := Value; Exit; End;
If FieldType = 'WORD' Then Begin Result := Value; Exit; End;
//Float Types
sgTemp := NumbersOnly(Value);
If FieldType = 'CURRENCY' Then Begin Result := sgTemp; Exit; End;
If FieldType = 'FLOAT' Then Begin Result := sgTemp; Exit; End;
//Integer Types
sgTemp := NumbersOnlyAbsolute(Value);
If FieldType = 'AUTOINC' Then Begin Result := sgTemp; Exit; End;
If FieldType = 'INTEGER' Then Begin Result := sgTemp; Exit; End;
If FieldType = 'LARGEINT' Then Begin Result := sgTemp; Exit; End;
If FieldType = 'SMALLINT' Then Begin Result := sgTemp; Exit; End;
//Date Types
Try
sgTemp := FormatDateTime('mm/dd/yyyy',StrToDateTime(Value));
If FieldType = 'DATE' Then Begin Result := sgTemp; Exit; End;
sgTemp := FormatDateTime('mm/dd/yyyy hh:nn:ss',StrToDateTime(Value));
If FieldType = 'DATETIME' Then Begin Result := sgTemp; Exit; End;
sgTemp := FormatDateTime('hh:nn:ss',StrToDateTime(Value));
If FieldType = 'TIME' Then Begin Result := sgTemp; Exit; End;
Except
Result := '';
Exit;
End;
If FieldType = 'BOOLEAN' Then
Begin
sgTemp := UpperCase(Copy(Trim(Value),1,1));
If (sgTemp = 'T') Or
(sgTemp = 'F') Or
(sgTemp = 'Y') Or
(sgTemp = 'N') Or
(sgTemp = '0') Or
(sgTemp = '1') Then
Begin
Result := sgTemp;
End
Else
Begin
Result := '';
End;
End
End;
{!~ Returns the name aof a filed from a list where values are arranged
as FieldName=FiledValue}
Function FieldNameFromList(lst : TStringList; index : Integer): String;
Var
sgTemp : String;
inPos : Integer;
Begin
Try
Result := '';
sgTemp := lst[index];
sgTemp := Trim(sgTemp);
inPos := Pos('=',sgTemp);
If inPos > 0 Then
Begin
sgTemp := Copy(sgTemp,1,inPos-1);
End
Else
Begin
sgTemp := '';
End;
Result := sgTemp;
Except
Result := '';
End;
End;
end.