2010-02-27 16:10:25 +00:00
|
|
|
{$INCLUDE wst_global.inc}
|
2008-06-06 13:27:02 +00:00
|
|
|
unit wst_initialization;
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
|
|
|
Classes, SysUtils;
|
|
|
|
|
|
|
|
type
|
|
|
|
|
|
|
|
TwstInitializationProc = procedure();
|
|
|
|
TwstFinalizationProc = TwstInitializationProc;
|
|
|
|
|
|
|
|
procedure wst_initialize();
|
|
|
|
procedure wst_add_init_proc(const AProc : TwstInitializationProc);
|
|
|
|
procedure wst_add_final_proc(const AProc : TwstFinalizationProc);
|
|
|
|
procedure wst_add_procs(const AInitProc : TwstInitializationProc; const AFinalProc : TwstFinalizationProc);
|
|
|
|
procedure wst_finalize();
|
|
|
|
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
var
|
|
|
|
Initialized : Boolean = False;
|
|
|
|
InitProcs : TList;
|
|
|
|
FinalProcs : TList;
|
|
|
|
|
|
|
|
procedure wst_prepare();
|
|
|
|
begin
|
|
|
|
if ( InitProcs = nil ) then begin
|
|
|
|
Initialized := False;
|
|
|
|
InitProcs := TList.Create();
|
|
|
|
FinalProcs := TList.Create();
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure wst_add_init_proc(const AProc : TwstInitializationProc);
|
|
|
|
begin
|
|
|
|
wst_prepare();
|
2010-02-27 16:10:25 +00:00
|
|
|
if Assigned(AProc) and ( InitProcs.IndexOf(@AProc) = -1 ) then
|
|
|
|
InitProcs.Add(@AProc);
|
2008-06-06 13:27:02 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
procedure wst_add_final_proc(const AProc : TwstFinalizationProc);
|
|
|
|
begin
|
|
|
|
wst_prepare();
|
2010-02-27 16:10:25 +00:00
|
|
|
if ( @AProc <> nil ) and ( FinalProcs.IndexOf(@AProc) = -1 ) then
|
|
|
|
FinalProcs.Add(@AProc);
|
2008-06-06 13:27:02 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
procedure wst_add_procs(const AInitProc : TwstInitializationProc; const AFinalProc : TwstFinalizationProc);
|
|
|
|
begin
|
|
|
|
wst_add_init_proc(AInitProc);
|
|
|
|
wst_add_final_proc(AFinalProc);
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure wst_initialize();
|
|
|
|
var
|
|
|
|
i, c : Integer;
|
|
|
|
p : TwstInitializationProc;
|
|
|
|
begin
|
|
|
|
wst_prepare();
|
|
|
|
Initialized := True;
|
|
|
|
c := InitProcs.Count;
|
|
|
|
for i := 0 to Pred(c) do begin
|
|
|
|
p := TwstInitializationProc(InitProcs[i]);
|
|
|
|
p();
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure wst_finalize();
|
|
|
|
var
|
|
|
|
i, c : Integer;
|
|
|
|
p : TwstInitializationProc;
|
|
|
|
begin
|
|
|
|
if Initialized then begin
|
|
|
|
Initialized := False;
|
|
|
|
if ( FinalProcs <> nil ) then begin
|
|
|
|
c := FinalProcs.Count;
|
|
|
|
for i := 0 to Pred(c) do begin
|
|
|
|
p := TwstFinalizationProc(FinalProcs[i]);
|
|
|
|
p();
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
FreeAndNil(FinalProcs);
|
|
|
|
FreeAndNil(InitProcs);
|
|
|
|
end;
|
|
|
|
|
2010-02-27 16:10:25 +00:00
|
|
|
initialization
|
2008-06-06 13:27:02 +00:00
|
|
|
finalization
|
|
|
|
wst_finalize();
|
|
|
|
|
|
|
|
end.
|