Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #expr RegisterProc('InitializeSetup','InitializeSetup1','',30)
- // InitializeSetup - unique id for this type of functions
- // it used as filter in EmitProcs
- // InitializeSetup1 - function name
- // 30 - execution order (function executed from low order to high)
- procedure InitializeSetup1(var Res:Boolean);
- begin
- // do the work
- end;
- #expr RegisterProc('InitializeSetup','InitializeSetup2','',20)
- procedure InitializeSetup2(var Res:Boolean);
- begin
- // do the work
- end;
- #expr RegisterProc('PrepareToInstall','PrepareToInstall1')
- //PrepareToInstall - another type of function
- function PrepareToInstall1(var NeedsRestart:Boolean):String;
- begin
- Result:='error';
- end;
- #expr RegisterProc('PrepareToInstall','PrepareToInstall2')
- function PrepareToInstall2(var NeedsRestart:Boolean):String;
- begin
- Result:='';
- end;
- function InitializeSetup: Boolean;
- begin
- Result:=True;
- #emit EmitProcs('InitializeSetup','%1(Result);')
- //Emit this code:
- //InitializeSetup2(Result);
- //InitializeSetup1(Result);
- end;
- function PrepareToInstall(var NeedsRestart:Boolean):String;
- begin
- Result:=''
- #emit EmitProcs('PrepareToInstall','+%1(NeedsRestart)')
- //Emit this code:
- //+PrepareToInstall1(NeedsRestart)
- //+PrepareToInstall2(Result)
- end;
- //Macro definitions:
- #dim public _Temp[4]
- #sub _RegisterProc
- #ifndef _Procs
- #dim public _Procs[1]
- #dim public _Order[1]
- #dim public _Types[1]
- #dim public _Param[1]
- #expr Local[0]=0
- #else
- #redim public _Procs[DimOf(_Procs)+1]
- #redim public _Order[DimOf(_Order)+1]
- #redim public _Types[DimOf(_Types)+1]
- #redim public _Param[DimOf(_Param)+1]
- #for {Local[0]=DimOf(_Procs)-1; \
- Local[0]>0&&_Temp[1]<_Order[Local[0]-1]; \
- Local[0]--} \
- _Procs[Local[0]]=_Procs[Local[0]-1], \
- _Order[Local[0]]=_Order[Local[0]-1], \
- _Types[Local[0]]=_Types[Local[0]-1], \
- _Param[Local[0]]=_Param[Local[0]-1];
- #endif
- #expr _Procs[Local[0]]=_Temp[0]
- #expr _Order[Local[0]]=_Temp[1]
- #expr _Types[Local[0]]=_Temp[2]
- #expr _Param[Local[0]]=_Temp[3]
- #endsub
- #define RegisterProc(str Type,str Proc,str Param='',int Order=0) \
- _Temp[0]=Proc, \
- _Temp[1]=Order, \
- _Temp[2]=Type, \
- _Temp[3]=Param, \
- _RegisterProc
- #sub _EmitProc
- #if _Types[_Temp[0]]==_Temp[2]
- #emit StringChange( \
- StringChange(_Temp[1], \
- '%1',_Procs[_Temp[0]]), \
- '%2',_Param[_Temp[0]])
- #endif
- #endsub
- #sub _EmitProcs
- #ifdef _Procs
- #for {_Temp[0]=0; \
- _Temp[0]<DimOf(_Procs); \
- _Temp[0]++} \
- _EmitProc
- #endif
- #endsub
- #define EmitProcs(str Type,str Template) \
- _Temp[1]=Template, \
- _Temp[2]=Type, \
- _EmitProcs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement