You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2465 8e941d3f-bd1b-0410-a28a-d453659cc2b4
96 lines
2.0 KiB
ObjectPascal
96 lines
2.0 KiB
ObjectPascal
{$INCLUDE wst_global.inc}
|
|
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();
|
|
if Assigned(AProc) and ( InitProcs.IndexOf(@AProc) = -1 ) then
|
|
InitProcs.Add(@AProc);
|
|
end;
|
|
|
|
procedure wst_add_final_proc(const AProc : TwstFinalizationProc);
|
|
begin
|
|
wst_prepare();
|
|
if ( @AProc <> nil ) and ( FinalProcs.IndexOf(@AProc) = -1 ) then
|
|
FinalProcs.Add(@AProc);
|
|
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 : Integer;
|
|
p : TwstInitializationProc;
|
|
begin
|
|
if Initialized then begin
|
|
Initialized := False;
|
|
if ( FinalProcs <> nil ) then begin
|
|
i := FinalProcs.Count - 1;
|
|
while (i >= 0) do begin
|
|
p := TwstFinalizationProc(FinalProcs[i]);
|
|
p();
|
|
Dec(i);
|
|
end;
|
|
end;
|
|
end;
|
|
FreeAndNil(FinalProcs);
|
|
FreeAndNil(InitProcs);
|
|
end;
|
|
|
|
initialization
|
|
finalization
|
|
wst_finalize();
|
|
|
|
end.
|