{$D-,O+,Q-,R-,S-}
unit IniFile_Class;
interface
uses Inifiles,Windows,Classes,SysUtils,Controls,FileCtrl,someStuff,dialogs;
{Structure use to store info from the different kind of ini}
type MainInfo=packed record// Main Ini
PathToIni:array[0..259] of char;
LastScheme:array[0..259]of char;
TCIni:array[0..259]of char;
WdxFolder,SchemeFile,UnloadingFile:array[0..259] of char;
language:array[0..259] of char;
Wdx_lng:array[0..4] of char;
KnownPlugin,RememberLast,CheckBeforeSave,
Run,Assoc,VerifyWdx,MaskEditBox,DisableEditBoxCompletly:boolean;
end;
PMainInfo=^MainInfo;
type InfoToWrite=packed record //for Scheme
PathToSchemeFile:array[0..260] of char;
Use,Extension,divider,StrReplaceValue:array[0..20] of char;
Name,Header,before,between,
wdxinfo,after,footer,ListExtension,AdditionnalText,DirectoryText:array[0..1024] of char;
Counter,DoNotWrite,SaveLog,ExtendedScheme,StrReplace:boolean;
MaxRight,CounterLength,IntervalNbr,CounterPos,recursionDepth:integer;
DisplayComment:array[0..260] of char;
end;
PInfToWri=^InfoToWrite;
{Definition of the classes I use and relatives procedure & function}
type TMyIni=Class
private
//To Retrieve the list of *.wdx in wdxFolder
procedure ScruteDossier(Dossier:string;filtre:string;attributs:integer;recursif:boolean;List:array of TstringList);
procedure ScruteFichier(Dossier:string;filtre:string;attributs:integer;List:array of TstringList);
public
MyIni:MainInfo;
//To set new value to each element AFTER they have been loaded
procedure SetLastScheme(NewValue:pchar);
procedure SetWdxFolder;
procedure SetLanguage(NewValue:pchar);
procedure SetTCIni(NewValue:pchar);
procedure LoadIniValue; //Load All Value
procedure SaveIniValue; //Save All Value
procedure FindPlugin; //Open a dialog to search for the wdx folder
Procedure CheckPluginFolder; //Scan the KNOWN wdx folder to update the plugin list
function UseAnotherFileForScheme:pchar;// to use a different file than Scheme.ini
function CountknownPlugin():integer;
procedure ListPlugin(MyList1,MyList2:TstringList);
end;
procedure Split(const Delimiter: Char;Input: string;const Strings: TStrings);
Type TSchema=Class
public
Scheme:InfoToWrite;
//To set each element AFTER loading...
procedure SetUse(value:pchar);
procedure SetExtension(value:pchar);
procedure Setname(value:pchar);
procedure SetHeader(value:pchar);
procedure SetBefore(value:pchar);
procedure SetDisplayComment(value:pchar);
procedure SetBetween(value:pchar);
procedure SetWdxInfo(value:pchar);
procedure SetAfter(value:pchar);
procedure SetFooter(value:pchar);
procedure SetDirectoryText(value:pchar);
procedure SetDivider(value:pchar);
procedure SetAdditionalText(value:pchar);
procedure SetListExtension(value:pchar);
procedure SetCounter(value:boolean);
procedure SetDoNotWrite(value:boolean);
procedure SetSaveLog(value:boolean);
procedure SetCounterLength(value:integer);
procedure SetIntervalNbr(value:integer);
procedure SetCounterPos(value:integer);
procedure SetRecursionDepth(value:integer);
procedure SetStrReplace(useStr:boolean;value1,value2:pchar);
procedure ListAvailableScheme(List:TstringList); //Retrieve the list of available plugin from [PLUGINLIST] in the ini file
procedure ListAvailableSchemeComment(List2:TStrings);
procedure ListAvailableExtension(List:array of Tstringlist);//Retrieve the list of all extension used in the Scheme file
procedure LoadScheme(SchemeName:pchar);//Load the wanted scheme in the structure - Read the file
procedure SaveScheme(SchemeName:Pchar);//Save the scheme in the Scheme file - Write the file
procedure SaveSpecialScheme(OrigScheme,SchemeTmp:Pchar);
procedure DeleteScheme(SchemeToDelete:Pchar);//Delete a scheme in the Scheme file-Write the file
function SchemeExist(SchemeName:Pchar):boolean; //Search for a scheme with a corresponding name - read the file
procedure ClearMe();
end;
type Tc_Column=record
List:TStringList;
ColumnDetail:array[0..30] of TStringList;
end;
type TC_Custom=Class
public
Column_Info:Tc_Column;
procedure Init(TC_Ini:pchar);
function GetValue(Column:integer):TStringList;
end;
implementation
{==============================FOR THE INI FILE======================}
procedure TMyIni.SetLastScheme(NewValue:pchar); begin
FillChar(MyIni.LastScheme,sizeof(MyIni.LastScheme),#0);
strlcat(MyIni.LastScheme,NewValue,sizeof(MyIni.LastScheme)-1);
end;
procedure TMyIni.SetLanguage(NewValue:pchar); begin
FillChar(MyIni.Language,sizeof(MyIni.Language),#0);
strlcat(MyIni.Language,NewValue,sizeof(MyIni.Language)-1);
end;
procedure TMyIni.SetTCIni(NewValue:pchar); begin
FillChar(MyIni.TCIni,sizeof(MyIni.TCIni),#0);
strlcat(MyIni.TCIni,NewValue,sizeof(MyIni.TCIni)-1);
end;
procedure TMyIni.SetWdxFolder;
var ChoixRepertoire:string; begin
FillChar(MyIni.WdxFolder,sizeof(MyIni.WdxFolder),#0);
if SelectDirectory('Choose Your Wdx Folder', '', ChoixRepertoire) then
strlcat(MyIni.WdxFolder,pchar(ChoixRepertoire),sizeof(MyIni.WdxFolder)-1)
else
strlcat(MyIni.WdxFolder,pchar('%COMMANDER_PATH%\plugins\wdx'),sizeof(MyIni.WdxFolder)-1);
end;
procedure TMyIni.LoadIniValue; //Load All Value
var tmpIni:TIniFile; s:string; begin
FillChar(MyIni.LastScheme,sizeof(MyIni.LastScheme),#0);
FillChar(MyIni.Language,sizeof(MyIni.Language),#0);
FillChar(MyIni.WdxFolder,sizeof(MyIni.WdxFolder),#0);
FillChar(MyIni.SchemeFile,sizeof(MyIni.SchemeFile),#0);
FillChar(MyIni.TCIni,sizeof(MyIni.TCIni),#0);
FillChar(MyIni.UnloadingFile,sizeof(MyIni.UnloadingFile),#0);
FillChar(MyIni.Wdx_lng,sizeof(MyIni.Wdx_lng),#0);
tmpIni:=TIniFile.create(MyIni.PathToIni);
MyIni.RememberLast:=tmpIni.ReadBool('Main','RememberLast',true);
MyIni.CheckBeforeSave:=tmpIni.ReadBool('Main','CheckBeforeSave',true);
MyIni.Run:=tmpIni.ReadBool('Main','Run',false);
MyIni.Assoc:=tmpIni.ReadBool('Main','AssocSchemExt',false);
MyIni.KnownPlugin:=tmpIni.ReadBool('Main','KnownPlugin',false);
MyIni.VerifyWdx:=tmpIni.ReadBool('Main','VerifyWdx',false);
MyIni.MaskEditBox:=tmpIni.ReadBool('Main','MaskEditBox',false);
MyIni.DisableEditBoxCompletly:=tmpIni.ReadBool('Main','DisableEditBoxCompletly',false);
s:=tmpIni.ReadString('Main','Wdx_lng','');
strlcat(MyIni.Wdx_lng,pchar(s),sizeof(MyIni.Wdx_lng)-1);
s:=tmpIni.ReadString('Main','WdxFolder','');
strlcat(MyIni.WdxFolder,pchar(s),sizeof(MyIni.WdxFolder)-1);
s:=tmpIni.ReadString('Main','LastScheme','');
strlcat(MyIni.LastScheme,pchar(s),sizeof(MyIni.LastScheme)-1);
s:=tmpIni.ReadString('Main','Language','English.lng');
strlcat(MyIni.Language,pchar(s),sizeof(MyIni.Language)-1);
s:=tmpIni.ReadString('Main','SchemeFile','');
strlcat(MyIni.SchemeFile,pchar(s),sizeof(MyIni.SchemeFile)-1);
s:=tmpIni.ReadString('Main','TCIni','');
strlcat(MyIni.TCIni,pchar(s),sizeof(MyIni.TCIni)-1);
s:=tmpIni.ReadString('Main','UnloadingFile','');
strlcat(MyIni.UnloadingFile,pchar(s),sizeof(MyIni.UnloadingFile)-1);
tmpIni.Free;
end;
procedure TMyIni.ScruteDossier(Dossier:string;filtre:string;attributs:integer;recursif:boolean;List:array of TstringList);
var DossierTrouve:string; Resultat:integer; SearchRec:TSearchRec; begin
if Dossier[length(Dossier)]='\' then Dossier:=copy(Dossier,1,length(Dossier)-1);
ScruteFichier(Dossier,filtre,attributs,List);
if recursif then begin
Resultat:=FindFirst(Dossier+'\'+'*.*',FaDirectory,SearchRec);
while Resultat=0 do begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') and ((SearchRec.Attr and faDirectory)>0)then begin//Dossier seulement
DossierTrouve:=Dossier+'\'+SearchRec.Name; // pour avoir le nom du dossier avec le chemin complet
if recursif then ScruteDossier(DossierTrouve,filtre,attributs,recursif,List);
end;
Resultat:=FindNext(SearchRec);
end;
end;//fin de if récursif
FindClose(SearchRec);// libération de la mémoire
end;
procedure TMyIni.ScruteFichier(Dossier:string;filtre:string;attributs:integer;List:array of TstringList);
var FichierTrouve:string; Resultat:integer; SearchRec:TSearchRec;
begin
if Dossier[length(Dossier)]='\' then Dossier:=copy(Dossier,1,length(Dossier)-1);
Resultat:=FindFirst(Dossier+'\'+filtre,Attributs,SearchRec);
while Resultat=0 do begin
if ((SearchRec.Attr and faDirectory<=0) and (SearchRec.Size>0)) then begin // On a trouvé un Fichier (et non un dossier)
FichierTrouve:=Dossier+'\'+SearchRec.Name;
List[0].Add(ExtractFileName(FichierTrouve));
List[1].Add(FichierTrouve);
end;
Resultat:=FindNext(SearchRec);
end;
FindClose(SearchRec);// libération de la mémoire
end;
procedure TMyIni.FindPlugin;
var tmpIni:TIniFile; List:array[0..2] of TstringList; i:integer; begin
SetWdxFolder;
List[0]:=TStringList.create;
List[1]:=TStringList.create;
ScruteDossier(MyIni.WdxFolder,'*.wdx',0,true,List);
tmpIni:=TIniFile.Create(MyIni.PathToIni);
for i:=0 to List[0].count-1 do begin
tmpIni.WriteString('PluginList',List[0][i],List[1][i]);
end;
tmpIni.Free;
end;
Procedure TMyIni.CheckPluginFolder;
var tmpIni:TIniFile;List,PlugPathList:array[0..2] of TstringList; i,j:integer; folder:string; isComplex:boolean; begin
List[0]:=TStringList.create;
List[1]:=TStringList.create;
isComplex:=false;
if MyIni.WdxFolder='' then strlcat(MyIni.WdxFolder,pchar('%COMMANDER_PATH%'),sizeof(MyIni.WdxFolder)-1)
else if MyIni.WdxFolder='List_Of_Path_In_Ini_File' then isComplex:=true;
tmpIni:=TIniFile.create(MyIni.PathToIni);
PlugPathList[0]:=TStringList.create;
PlugPathList[1]:=TStringList.create;
if isComplex=true then begin
tmpIni.ReadSection('PluginPathlist',PlugPathList[0]);
for i:=0 to PlugPathList[0].count -1 do begin
PlugPathList[1].add( tmpini.ReadString('PluginPathList',PlugPathList[0][i],'%COMMANDER_PATH%'));
end;
end else if isComplex=false then PlugPathList[1].add(MyIni.WdxFolder);
tmpIni.EraseSection('PluginList');
for j:=0 to PlugPathList[1].count -1 do begin
Folder:=getExtendedPath(PlugPathList[1][j]);
ScruteDossier(Folder,'*.wdx',0,true,List);
for i:=0 to List[0].count-1 do begin
tmpIni.WriteString('PluginList',List[0][i],List[1][i]);
end;
List[0].Clear;
List[1].Clear;
end;
tmpIni.Free;
end;
function TMyIni.UseAnotherFileForScheme:pchar;
begin
if MyIni.SchemeFile<>'' then result:=MyIni.SchemeFile
else result:='-1';
end;
procedure TMyIni.SaveIniValue;
var tmpIni:TIniFile; begin
tmpIni:=TIniFile.create(MyIni.PathToIni);
tmpIni.Writestring('Main','LastScheme',MyIni.LastScheme);
tmpIni.Writestring('Main','Language',MyIni.Language);
tmpIni.Writestring('Main','WdxFolder',MyIni.WdxFolder);
tmpIni.Writestring('Main','TCIni',MyIni.TCIni);
tmpIni.WriteBool('Main','KnownPlugin',MyIni.KnownPlugin);
tmpIni.WriteBool('Main','AssocSchemExt',MyIni.Assoc);
tmpIni.WriteBool('Main','CheckBeforeSave',MyIni.CheckBeforeSave);
tmpIni.WriteBool('Main','RememberLast',MyIni.RememberLast);
tmpIni.WriteBool('Main','VerifyWdx',MyIni.VerifyWdx);
tmpIni.WriteBool('Main','Run',MyIni.Run);
tmpIni.WriteBool('Main','MaskEditBox',MyIni.MaskEditBox);
tmpIni.free;
end;
function TMyIni.CountknownPlugin():integer;
var tmpIni:TIniFile;
myList:TStringlist;
test:boolean;
begin
myList:=TStringList.create;
tmpIni:=TIniFile.create(MyIni.PathToIni);
test:=tmpIni.SectionExists('PluginList');
if not test then result :=0
else begin
myList.Clear;
tmpIni.ReadSection('PluginList',myList);
result:=myList.Count;
end;
end;
procedure TMyIni.ListPlugin(MyList1,MyList2:TstringList);
var tmpIni:TIniFile;
i:integer;
s:string;
begin
tmpIni:=TIniFile.create(MyIni.PathToIni);
tmpIni.ReadSection('PluginList',MyList1);
MyList1.Sort;
For i:=0 to MyList1.Count-1 do begin
s:=tmpIni.ReadString('PluginList',MyList1[i],'');
MyList2.Add(getExtendedPath(s));
end;
end;
{======================FOR THE SCHEMA======================}
procedure TSchema.SetUse(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.Use,sizeof(Scheme.Use),#0);
strlcat(Scheme.Use,pchar(s),sizeof(Scheme.Use)-1);
end;
procedure TSchema.SetCounter(value:boolean); begin
Scheme.Counter:=value;
end;
procedure TSchema.SetCounterPos(value:integer); begin
Scheme.CounterPos:=value;
end;
procedure TSchema.SetDoNotWrite(value:boolean); begin
Scheme.DoNotWrite:=value;
end;
procedure TSchema.SetSaveLog(value:boolean); begin
Scheme.SaveLog:=value;
end;
procedure TSchema.SetExtension(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.Extension,sizeof(Scheme.Extension),#0);
strlcat(Scheme.Extension,pchar(s),sizeof(Scheme.Extension)-1);
end;
procedure TSchema.Setname(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.Name,sizeof(Scheme.Name),#0);
strlcat(Scheme.Name,pchar(s),sizeof(Scheme.Name)-1);
end;
procedure TSchema.SetDisplayComment(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.DisplayComment,sizeof(Scheme.DisplayComment),#0);
strlcat(Scheme.DisplayComment,pchar(s),sizeof(Scheme.DisplayComment)-1);
end;
procedure TSchema.SetHeader(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.Header,sizeof(Scheme.Header),#0);
strlcat(Scheme.Header,pchar(s),sizeof(Scheme.Header)-1);
end;
procedure TSchema.SetBefore(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.before,sizeof(Scheme.before),#0);
strlcat(Scheme.before,pchar(s),sizeof(Scheme.before)-1);
end;
procedure TSchema.SetBetween(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.between,sizeof(Scheme.between),#0);
strlcat(Scheme.between,pchar(s),sizeof(Scheme.between)-1);
end;
procedure TSchema.SetWdxInfo(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.wdxinfo,sizeof(Scheme.wdxinfo),#0);
strlcat(Scheme.wdxinfo,pchar(s),sizeof(Scheme.wdxinfo)-1);
end;
procedure TSchema.SetAfter(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.after,sizeof(Scheme.after),#0);
strlcat(Scheme.after,pchar(s),sizeof(Scheme.after)-1);
end;
procedure TSchema.SetFooter(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.footer,sizeof(Scheme.footer),#0);
strlcat(Scheme.footer,pchar(s),sizeof(Scheme.footer)-1);
end;
procedure TSchema.SetDirectoryText(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.DirectoryText,sizeof(Scheme.DirectoryText),#0);
strlcat(Scheme.DirectoryText,pchar(s),sizeof(Scheme.DirectoryText)-1);
end;
procedure TSchema.SetDivider(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.divider,sizeof(Scheme.divider),#0);
strlcat(Scheme.divider,pchar(s),sizeof(Scheme.divider)-1);
end;
procedure TSchema.SetListExtension(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.ListExtension,sizeof(Scheme.ListExtension),#0);
strlcat(Scheme.ListExtension,pchar(s),sizeof(Scheme.ListExtension)-1);
end;
procedure TSchema.SetAdditionalText(value:pchar);
var s:string; begin
s:='"'+value+'"';
fillchar(Scheme.AdditionnalText,sizeof(Scheme.AdditionnalText),#0);
strlcat(Scheme.AdditionnalText,pchar(s),sizeof(Scheme.AdditionnalText)-1);
end;
procedure TSchema.SetStrReplace(useStr:boolean;value1,value2:pchar);
var s:string; begin
s:='"'+value1+'|'+value2+'"';
Scheme.StrReplace:=useStr;
fillchar(Scheme.StrReplaceValue,sizeof(Scheme.StrReplaceValue),#0);
strlcat(Scheme.StrReplaceValue,pchar(s),sizeof(Scheme.StrReplaceValue)-1);
end;
procedure TSchema.SetCounterLength(value:integer);
begin
Scheme.CounterLength:=value;
end;
procedure TSchema.SetIntervalNbr(value:integer);
begin
Scheme.IntervalNbr:=value;
end;
procedure TSchema.ClearMe();
begin
SetUse(pchar(''));
SetExtension(pchar(''));
Setname(pchar(''));
SetHeader(pchar(''));
SetBefore(pchar(''));
SetBetween(pchar(''));
SetWdxInfo(pchar(''));
SetAfter(pchar(''));
SetFooter(pchar(''));
SetDirectoryText(pchar(''));
SetDisplayComment(pchar(''));
SetDivider(pchar(''));
SetAdditionalText(pchar(''));
SetListExtension(pchar(''));
SetCounter(false);
SetDoNotWrite(false);
SetSaveLog(true);
SetCounterLength(0);
SetIntervalNbr(0);
SetCounterPos(0);
SetDoNotWrite(true);
end;
procedure TSchema.LoadScheme(SchemeName:pchar);
var extend:boolean;i:integer;tmpIni:Tinifile; tmpscheme:PInfToWri; s:AnsiString; List: TStringList; begin
tmpscheme:=@Scheme;
extend:=false;
List:=TStringList.Create;
fillchar(tmpscheme^.Use,sizeof(tmpscheme^.Use),#0);
fillchar(tmpscheme^.Extension,sizeof(tmpscheme^.Extension),#0);
fillchar(tmpscheme^.Name,sizeof(tmpscheme^.Name),#0);
fillchar(tmpscheme^.Header,sizeof(tmpscheme^.Header),#0);
fillchar(tmpscheme^.before,sizeof(tmpscheme^.before),#0);
fillchar(tmpscheme^.between,sizeof(tmpscheme^.between),#0);
fillchar(tmpscheme^.wdxinfo,sizeof(tmpscheme^.wdxinfo),#0);
fillchar(tmpscheme^.ListExtension,sizeof(tmpscheme^.ListExtension),#0);
fillchar(tmpscheme^.after,sizeof(tmpscheme^.after),#0);
fillchar(tmpscheme^.footer,sizeof(tmpscheme^.footer),#0);
fillchar(tmpscheme^.DirectoryText,sizeof(tmpscheme^.DirectoryText),#0);
fillchar(tmpscheme^.divider,sizeof(tmpscheme^.divider),#0);
fillchar(tmpscheme^.AdditionnalText,sizeof(tmpscheme^.AdditionnalText),#0);
fillchar(tmpscheme^.StrReplaceValue,sizeof(tmpscheme^.StrReplaceValue),#0);
fillchar(tmpscheme^.DisplayComment,sizeof(tmpscheme^.DisplayComment),#0);
tmpIni:=TIniFile.create(Scheme.PathToSchemeFile);
s:= tmpIni.ReadString(SchemeName,'Use','');
strlcat(tmpscheme^.Use,pchar(s),sizeof(tmpscheme^.Use)-1);
s:=tmpIni.ReadString(SchemeName,'Extension','');
strlcat(tmpscheme^.Extension,pchar(s),sizeof(tmpscheme^.Extension)-1);
s:=tmpIni.ReadString(SchemeName,'Name','');
strlcat(tmpscheme^.Name,pchar(s),sizeof(tmpscheme^.Name)-1);
s:=tmpIni.ReadString(SchemeName,'DisplayComment','');
strlcat(tmpscheme^.DisplayComment,pchar(s),sizeof(tmpscheme^.DisplayComment)-1);
s:=tmpIni.ReadString(SchemeName,'Header','');
strlcat(tmpscheme^.Header,pchar(s),sizeof(tmpscheme^.Header)-1);
if (pos('%extended%|',tmpscheme^.Header)<>0) then begin
extend:=true;
s:=Stringreplace(tmpscheme^.Header,pchar('%extended%|'),'',[rfReplaceAll, rfIgnoreCase]);
fillchar(tmpscheme^.Header,sizeof(tmpscheme^.Header),#0);
split('|',s,List);
for i:=0 to List.count-1 do begin
s:=tmpIni.ReadString(SchemeName,List[i],'');
strlcat(tmpscheme^.Header,pchar(s),sizeof(tmpscheme^.Header)-1);
end;
end;
s:=tmpIni.ReadString(SchemeName,'before','');
strlcat(tmpscheme^.before,pchar(s),sizeof(tmpscheme^.before)-1);
if (pos('%extended%|',tmpscheme^.before)<>0) then begin
extend:=true;
s:=Stringreplace(tmpscheme^.before,pchar('%extended%|'),'',[rfReplaceAll, rfIgnoreCase]);
fillchar(tmpscheme^.Header,sizeof(tmpscheme^.before),#0);
split('|',s,List);
for i:=0 to List.count-1 do begin
s:=tmpIni.ReadString(SchemeName,List[i],'');
strlcat(tmpscheme^.before,pchar(s),sizeof(tmpscheme^.before)-1);
end;
end;
s:=tmpIni.ReadString(SchemeName,'between','');
strlcat(tmpscheme^.between,pchar(s),sizeof(tmpscheme^.between)-1);
if (pos('%extended%|',tmpscheme^.between)<>0) then begin
extend:=true;
s:=Stringreplace(tmpscheme^.between,pchar('%extended%|'),'',[rfReplaceAll, rfIgnoreCase]);
fillchar(tmpscheme^.between,sizeof(tmpscheme^.between),#0);
split('|',s,List);
for i:=0 to List.count-1 do begin
s:=tmpIni.ReadString(SchemeName,List[i],'');
strlcat(tmpscheme^.between,pchar(s),sizeof(tmpscheme^.between)-1);
end;
end;
s:=tmpIni.ReadString(SchemeName,'wdxinfo','');
strlcat(tmpscheme^.wdxinfo,pchar(s),sizeof(tmpscheme^.wdxinfo)-1);
if (pos('%extended%|',tmpscheme^.wdxinfo)<>0) then begin
extend:=true;
s:=Stringreplace(tmpscheme^.wdxinfo,pchar('%extended%|'),'',[rfReplaceAll, rfIgnoreCase]);
fillchar(tmpscheme^.wdxinfo,sizeof(tmpscheme^.wdxinfo),#0);
split('|',s,List);
for i:=0 to List.count-1 do begin
s:=tmpIni.ReadString(SchemeName,List[i],'');
strlcat(tmpscheme^.wdxinfo,pchar(s),sizeof(tmpscheme^.wdxinfo)-1);
end;
end;
s:=tmpIni.ReadString(SchemeName,'after','');
strlcat(tmpscheme^.after,pchar(s),sizeof(tmpscheme^.after)-1);
if (pos('%extended%|',tmpscheme^.after)<>0) then begin
extend:=true;
s:=Stringreplace(tmpscheme^.after,pchar('%extended%|'),'',[rfReplaceAll, rfIgnoreCase]);
fillchar(tmpscheme^.after,sizeof(tmpscheme^.after),#0);
split('|',s,List);
for i:=0 to List.count-1 do begin
s:=tmpIni.ReadString(SchemeName,List[i],'');
strlcat(tmpscheme^.after,pchar(s),sizeof(tmpscheme^.after)-1);
end;
end;
s:=tmpIni.ReadString(SchemeName,'footer','');
strlcat(tmpscheme^.footer,pchar(s),sizeof(tmpscheme^.footer)-1);
if (pos('%extended%|',tmpscheme^.footer)<>0) then begin
extend:=true;
s:=Stringreplace(tmpscheme^.footer,pchar('%extended%|'),'',[rfReplaceAll, rfIgnoreCase]);
fillchar(tmpscheme^.footer,sizeof(tmpscheme^.footer),#0);
split('|',s,List);
for i:=0 to List.count-1 do begin
s:=tmpIni.ReadString(SchemeName,List[i],'');
strlcat(tmpscheme^.footer,pchar(s),sizeof(tmpscheme^.footer)-1);
end;
end;
s:=tmpIni.ReadString(SchemeName,'DirectoryText','');
strlcat(tmpscheme^.DirectoryText,pchar(s),sizeof(tmpscheme^.DirectoryText)-1);
if (pos('%extended%|',tmpscheme^.DirectoryText)<>0) then begin
extend:=true;
s:=Stringreplace(tmpscheme^.DirectoryText,pchar('%extended%|'),'',[rfReplaceAll, rfIgnoreCase]);
fillchar(tmpscheme^.DirectoryText,sizeof(tmpscheme^.DirectoryText),#0);
split('|',s,List);
for i:=0 to List.count-1 do begin
s:=tmpIni.ReadString(SchemeName,List[i],'');
strlcat(tmpscheme^.DirectoryText,pchar(s),sizeof(tmpscheme^.DirectoryText)-1);
end;
end;
s:=tmpIni.ReadString(SchemeName,'divider','');
strlcat(tmpscheme^.divider,pchar(s),sizeof(tmpscheme^.divider)-1);
s:=tmpIni.ReadString(SchemeName,'ExtensionList','');
strlcat(tmpscheme^.ListExtension,pchar(s),sizeof(tmpscheme^.ListExtension)-1);
s:=tmpIni.ReadString(SchemeName,'AdditionalText','');
strlcat(tmpscheme^.AdditionnalText,pchar(s),sizeof(tmpscheme^.AdditionnalText)-1);
tmpscheme^.Counter:=tmpIni.ReadBool(SchemeName,'AddCounter',false);
tmpscheme^.DoNotWrite:=tmpIni.ReadBool(SchemeName,'DoNotWriteEmpty',false);
tmpscheme^.SaveLog:=tmpIni.ReadBool(SchemeName,'SaveErrorLog',false);
tmpscheme^.StrReplace:=tmpIni.ReadBool(SchemeName,'StrReplace',false);
tmpscheme^.MaxRight:=tmpIni.ReadInteger(SchemeName,'MaxRight',12);
tmpscheme^.CounterLength:=tmpIni.ReadInteger(SchemeName,'CounterLength',0);
tmpscheme^.IntervalNbr:=tmpini.ReadInteger(SchemeName,'IntervalNbr',0);
tmpscheme^.CounterPos:=tmpini.ReadInteger(SchemeName,'CounterPos',0);
s:=tmpIni.ReadString(SchemeName,'StrReplaceValue','');
strlcat(tmpscheme^.StrReplaceValue,pchar(s),sizeof(tmpscheme^.StrReplaceValue)-1);
tmpscheme^.recursionDepth:=tmpIni.ReadInteger(SchemeName,'RecursionDepth',1);
tmpIni.free;
if extend then tmpscheme^.ExtendedScheme:=true
else tmpscheme^.ExtendedScheme:=false;
//MessageBox(GetActiveWindow,Scheme.Extension,'Ext Fichier',MB_OK);
end;
procedure TSchema.SetRecursionDepth(value:integer);
begin
Scheme.RecursionDepth:=value;
end;
procedure TSchema.SaveScheme(SchemeName:Pchar);
var tmIni:Tinifile; PScheme:PInfToWri; begin
PScheme:=@Scheme;
tmIni:=TIniFile.create(Scheme.PathToSchemeFile);
tmIni.WriteString(SchemeName,'use',PScheme^.Use);
tmIni.WriteString(SchemeName,'Extension',PScheme^.Extension);
tmIni.WriteString(SchemeName,'Divider',PScheme^.Divider);
tmIni.WriteString(SchemeName,'header',PScheme^.header);
tmIni.WriteString(SchemeName,'before',PScheme^.before);
tmIni.WriteString(SchemeName,'name',PScheme^.name);
tmIni.WriteString(SchemeName,'between',PScheme^.between);
tmIni.WriteString(SchemeName,'wdxinfo',PScheme^.wdxinfo);
tmIni.WriteString(SchemeName,'after',PScheme^.after);
tmIni.WriteString(SchemeName,'footer',PScheme^.footer);
tmIni.WriteString(SchemeName,'DirectoryText',PScheme^.DirectoryText);
tmIni.WriteString(SchemeName,'ExtensionList',PScheme^.ListExtension);
tmIni.WriteString(SchemeName,'AdditionalText',PScheme^.AdditionnalText);
tmIni.WriteString(SchemeName,'DisplayComment',PScheme^.DisplayComment);
tmIni.WriteBool(SchemeName,'AddCounter',PScheme^.Counter);
tmIni.WriteBool(SchemeName,'DoNotWriteEmpty',PScheme^.DoNotWrite);
tmIni.WriteBool(SchemeName,'SaveErrorLog',PScheme^.SaveLog);
tmIni.WriteInteger(SchemeName,'MaxRight',PScheme^.MaxRight);
tmIni.WriteInteger(SchemeName,'IntervalNbr',PScheme^.IntervalNbr);
tmIni.WriteInteger(SchemeName,'CounterLength',PScheme^.CounterLength);
tmIni.WriteInteger(SchemeName,'CounterPos',PScheme^.CounterPos);
tmIni.WriteInteger(SchemeName,'RecursionDepth',PScheme^.recursionDepth);
tmIni.WriteString(SchemeName,'strReplaceValue',PScheme^.StrReplaceValue);
tmIni.WriteBool(SchemeName,'strReplace',PScheme^.StrReplace);
tmIni.free;
end;
procedure TSchema.SaveSpecialScheme(OrigScheme,SchemeTmp:Pchar);
var i:integer;s:string;tmIni:Tinifile;List:TStringList; begin
List:=TStringList.Create;
tmIni:=TIniFile.create(Scheme.PathToSchemeFile);
tmIni.ReadSection(OrigScheme,List);
for i:=0 to List.count-1 do begin
s:='"'+ tmIni.ReadString(OrigScheme,List[i],'')+'"';
tmini.WriteString(Schemetmp,List[i],s);
end;
tmIni.free;
end;
procedure TSchema.DeleteScheme(SchemeToDelete:Pchar);
var tmIni:Tinifile; begin
tmIni:=TIniFile.create(Scheme.PathToSchemeFile);
tmIni.EraseSection(SchemeToDelete);
tmIni.free;
end;
procedure TSchema.ListAvailableScheme(List:TstringList);
var tmp:TInifile; temp:TStringList; i:integer;begin
temp:=TStringList.create;
tmp:=TIniFile.create(Scheme.PathToSchemeFile);
tmp.ReadSections(temp);
For i:=0 to Temp.Count-1 do begin
if (Temp[i]<>'RunTemp') then List.Add(Temp[i]);
end;
List.Sort;
temp.free;
tmp.Free;
end;
procedure TSchema.ListAvailableSchemeComment(List2:TStrings);
var tmp:TInifile; temp:TStringList; i:integer; s:string;begin
temp:=TStringList.create;
tmp:=TIniFile.create(Scheme.PathToSchemeFile);
tmp.ReadSections(temp);
For i:=0 to Temp.Count-1 do begin
if (Temp[i]<>'RunTemp') then begin
s:=tmp.ReadString(Temp[i],'DisplayComment','');
List2.Add(Format('%s=%s', [Temp[i], s]));
end;
end;
temp.free;
tmp.Free;
end;
procedure TSchema.ListAvailableExtension(List:array of Tstringlist);
var tmp:TInifile; i:integer; s:string; begin
tmp:=TIniFile.create(Scheme.PathToSchemeFile);
tmp.ReadSections(List[0]);
For i:=0 to List[0].Count-1 do begin
s:=tmp.ReadString(List[0][i],'Extension','');
List[1].Add(s);
end;
tmp.Free;
end;
function TSchema.SchemeExist(SchemeName:Pchar):boolean;
var exist,findone:boolean; List:TStringList; i:integer; begin
exist:=false;
findone:=false;
List:=TStringList.create;
ListAvailableScheme(List);
for i:=0 to List.count-1 do begin
if ((List[i]=SchemeName) and (findone=false)) then begin
exist:=true;
findone:=true;
end;
end;
result:=exist;
end;
{======================FOR TC CUSTOM COLUMN======================}
procedure TC_Custom.Init(TC_Ini:pchar);
var tmp:TIniFile;
Temp:string;
i,j:integer;
s:string;
begin
Column_Info.List:=TStringList.Create;
tmp:=TIniFile.Create(TC_Ini);
Temp:=tmp.ReadString('CustomFields','Titles','');
Temp:=StringReplace(Temp,' ', '_',[rfReplaceAll, rfIgnoreCase]);
Split('|',Temp,Column_Info.List);
for i:=0 to Column_Info.List.Count-1 do begin
Column_Info.ColumnDetail[i]:=TStringList.Create;
Column_Info.List[i]:=StringReplace(Column_Info.List[i],'_', ' ',[rfReplaceAll, rfIgnoreCase]);
s:='Contents'+inttostr(i+1);
Temp:=tmp.ReadString('CustomFields',s,'');
Temp:=StringReplace(Temp,'\n', '@',[rfReplaceAll, rfIgnoreCase]);
Temp:=StringReplace(Temp,' ', '_',[rfReplaceAll, rfIgnoreCase]);
Split('@',Temp,Column_Info.ColumnDetail[i]);
for j:=0 to Column_Info.ColumnDetail[i].Count-1 do begin
Column_Info.ColumnDetail[i][j]:=StringReplace(Column_Info.ColumnDetail[i][j],'_', ' ',[rfReplaceAll, rfIgnoreCase]);
end;
end;
tmp.Free;
end;
function TC_Custom.GetValue(Column:integer):TStringList;
var List1:TStringList;
List2:TStringList;
List3:TStringList;
Temp:TStringList;
s,s1,s2:string;
i,j,k:integer;
begin
List1:=TStringList.Create;
List2:=TStringList.Create;
List3:=TStringList.Create;
Temp:=TStringList.Create;
for i:=0 to Column_Info.ColumnDetail[Column].Count-1 do begin
s2:='';
s:=Column_Info.ColumnDetail[Column][i];
s:=StringReplace(s,'][', '@',[rfReplaceAll, rfIgnoreCase]);
s:=StringReplace(s,'=', '',[rfReplaceAll, rfIgnoreCase]);
s:=StringReplace(s,'[', '',[rfReplaceAll, rfIgnoreCase]);
s:=StringReplace(s,']', '',[rfReplaceAll, rfIgnoreCase]);
s:=StringReplace(s,'"', '!',[rfReplaceAll, rfIgnoreCase]);
if pos('@',s) <>0 then begin
List2.Clear;
s:=StringReplace(s,' ', '_',[rfReplaceAll, rfIgnoreCase]);
Split('@',s,List2);
for j:=0 to List2.count-1 do begin
if pos('.',List2[j])<>0 then begin //plugin
Split('.',List2[j],List3);
for k:=0 to List3.count-1 do begin
List3[k]:=StringReplace(List3[k],'_', ' ',[rfReplaceAll, rfIgnoreCase]);
end;
Case List3.Count of
1:begin{error} end;
2:begin
s1:='@Mod='+List3[1]+'@'+List3[0]+'.wdx';
end;
3:begin
s1:='@Mod='+List3[2]+'.'+List3[1]+'@'+List3[0]+'wdx';
end;
end;
end;
if s2<>'' then s2:=s2+';'+s1
else s2:=s1;
end;
end else begin
if pos('.',s)<>0 then begin //plugin
List2.clear;
Split('.',s,List2);
for k:=0 to List2.count-1 do begin
List2[k]:=StringReplace(List2[k],'_', ' ',[rfReplaceAll, rfIgnoreCase]);
end;
Case List2.Count of
1:begin{error} end;
2:begin
s1:='@Mod='+List2[1]+'@'+List2[0]+'.wdx';
end;
3:begin
s1:='@Mod='+List2[2]+'.'+List2[1]+'@'+List2[0]+'.wdx';
end;
end;
end;
if s2<>'' then s2:=s2+';'+s1
else s2:=s1;
end;
Temp.add(s2);
end;
if Temp.count<5 then begin
for i:=0 to Temp.Count-1 do begin
List1.Add(Temp[i]);
end;
for i:=Temp.Count to 5 do begin
List1.Add('');
end;
end;
if Temp.Count=5 then begin
for i:=0 to Temp.Count-1 do begin
List1.Add(Temp[i]);
end;
end;
if Temp.Count>5 then begin
for i:=0 to 3 do begin
List1.Add(Temp[i]);
end;
s:='';
for i:=4 to Temp.Count-1 do begin
s:=s+';'+Temp[i];
end;
List1.Add(s);
end;
result:=List1;
end;
{======================GENERIC FUNCTION======================}
procedure Split(const Delimiter: Char;Input: string;const Strings: TStrings);
begin
Assert(Assigned(Strings));
Strings.Clear;
Strings.Delimiter := Delimiter;
Strings.DelimitedText := Input;
end;
{======================END OF FILE======================}
end.
Detected encoding: ANSI (CP1252) | 4
|
|