home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 March / CMCD0304.ISO / Software / Freeware / Programare / nullsoft / nsis20.exe / Contrib / System / System.nsh < prev    next >
Text File  |  2003-09-04  |  16KB  |  472 lines

  1. ; Some useful functions, structures, constants
  2. ; (c) brainsucker, 2002
  3. ; (r) BSForce
  4.  
  5. ; Check for double includes
  6. !ifndef System.NSH.Included
  7. !define System.NSH.Included
  8.  
  9. !verbose 3
  10.  
  11. ; ------------- Functions --------------
  12.  
  13. ; LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  14. !define sysWNDPROC "(i.s, i.s, i.s, i.s) iss"
  15.  
  16. ; LRESULT DefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
  17. !define sysDefWindowProc "user32::DefWindowProcA(i, i, i, i) i"
  18.  
  19. !define sysMessageBox "user32::MessageBoxA(i, t, t, i) i"
  20.  
  21. !define sysMessageBeep "user32::MessageBeep(i) i"
  22.  
  23. !define sysMessageBoxIndirect 'user32::MessageBoxIndirectA(i) i'
  24.  
  25. ; HMODULE GetModuleHandle(LPCTSTR lpModuleName); 
  26. !define sysGetModuleHandle "kernel32::GetModuleHandleA(t) i"
  27.  
  28. ; HMODULE LoadLibrary(LPCTSTR lpFileName);
  29. !define sysLoadLibrary "kernel32::LoadLibraryA(t) i"
  30.  
  31. ; BOOL FreeLibrary(HMODULE hModule);
  32. !define sysFreeLibrary "kernel32::FreeLibrary(i) i"
  33.  
  34. ; HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName);
  35. !define sysLoadCursor "user32::LoadCursorA(i, t) i"
  36.  
  37. ; ATOM RegisterClass(CONST WNDCLASS *lpWndClass);
  38. !define sysRegisterClass "user32::RegisterClassA(i) i"
  39.  
  40. ; HANDLE LoadImage(HINSTANCE hinst, LPCTSTR lpszName, UINT uType,
  41. ;       int cxDesired, int cyDesired, UINT fuLoad);
  42. !define sysLoadImage "user32::LoadImageA(i, t, i, i, i, i) i"
  43.  
  44. ; BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);
  45. !define sysPlaySound "winmm.dll::PlaySoundA(t, i, i) i"
  46.  
  47. ; HWND CreateWindowEx(DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName,
  48. ;       DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent,
  49. ;       HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
  50. !define sysCreateWindowEx "user32::CreateWindowExA(i, t, t, i, i, i, i, i, i, i, i, i) i"
  51.  
  52. ; BOOL IsWindow(HWND hWnd);
  53. !define sysIsWindow "user32::IsWindow(i) i"
  54.  
  55. ; LONG SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong);
  56. !define sysSetWindowLong "user32::SetWindowLongA(i, i, i) i"
  57.  
  58. ; BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags);
  59. !define sysSetWindowPos "user32::SetWindowPos(i, i, i, i, i, i, i) i"
  60.  
  61. ; BOOL ShowWindow(HWND hWnd, int nCmdShow);
  62. !define sysShowWindow "user32::ShowWindow(i, i) i"
  63.  
  64. ; BOOL DestroyWindow(HWND hWnd);
  65. !define sysDestroyWindow "user32::DestroyWindow(i) i"
  66.  
  67. ; BOOL GetClientRect(HWND hWnd, LPRECT lpRect);
  68. !define sysGetClientRect "user32::GetClientRect(i, i) i"
  69.  
  70. ; BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
  71. !define sysGetMessage "user32::GetMessageA(i, i, i, i) i"
  72.  
  73. ; LRESULT DispatchMessage(CONST MSG *lpmsg);
  74. !define sysDispatchMessage "user32::DispatchMessageA(i) i"
  75.  
  76. ; BOOL DeleteObject(HGDIOBJ hObject);
  77. !define sysDeleteObject "gdi32::DeleteObject(i) i"
  78.  
  79. ; int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);
  80. !define sysGetObject "gdi32::GetObjectA(i, i, i) i"
  81.  
  82. ; HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);
  83. !define sysSelectObject "gdi32::SelectObject(i, i) i"
  84.  
  85. ; HDC CreateCompatibleDC(HDC hdc);
  86. !define sysCreateCompatibleDC "gdi32::CreateCompatibleDC(i) i"
  87.  
  88. ; BOOL DeleteDC(HDC hdc);
  89. !define sysDeleteDC "gdi32::DeleteDC(i) i"
  90.  
  91. ; BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, 
  92. ;       HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);
  93. !define sysBitBlt "gdi32::BitBlt(i, i, i, i, i, i, i, i, i) i"
  94.  
  95. ; proposed by abgandar
  96. ; int AddFontResource(LPCTSTR lpszFilename);
  97. !define sysAddFontResource "gdi32::AddFontResourceA(t) i"
  98.  
  99. ; HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint);
  100. !define sysBeginPaint "user32::BeginPaint(i, i) i"
  101.  
  102. ; BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);
  103. !define sysEndPaint "user32::EndPaint(i, i) i"
  104.  
  105. ; BOOL SystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni);
  106. !define sysSystemParametersInfo "user32::SystemParametersInfoA(i, i, i, i) i"
  107.  
  108. ; UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);
  109. !define sysSetTimer "user32::SetTimer(i, i, i, k) i"
  110.  
  111. !define sysGetLogicalDriveStrings 'kernel32::GetLogicalDriveStringsA(i, i) i'
  112.  
  113. !define sysGetDiskFreeSpaceEx 'kernel32::GetDiskFreeSpaceExA(t, *l, *l, *l) i'
  114.  
  115. ; UINT GetDriveType(LPCTSTR lpRootPathName);
  116. !define sysGetDriveType 'kernel32::GetDriveTypeA(t) i'
  117.  
  118. ; HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData);
  119. !define sysFindFirstFile 'kernel32::FindFirstFileA(t, i) i'
  120.  
  121. ; BOOL FindClose(HANDLE hFindFile);
  122. !define sysFindClose 'kernel32::FindClose(i) i'
  123.  
  124. ; BOOL FileTimeToSystemTime(CONST FILETIME *lpFileTime, 
  125. ; LPSYSTEMTIME lpSystemTime);
  126. !define sysFileTimeToSystemTime 'kernel32::FileTimeToSystemTime(*l, i) i'
  127.  
  128. ; BOOL FileTimeToLocalFileTime(
  129. ;       CONST FILETIME *lpFileTime, 
  130. ;       LPFILETIME lpLocalFileTime);
  131. !define sysFileTimeToLocalFileTime 'kernel32::FileTimeToLocalFileTime(*l, *l) i'
  132.  
  133. ; BOOL SystemTimeToTzSpecificLocalTime(LPTIME_ZONE_INFORMATION lpTimeZone, 
  134. ; LPSYSTEMTIME lpUniversalTime, LPSYSTEMTIME lpLocalTime);
  135. !define sysSystemTimeToTzSpecificLocalTime 'kernel32::SystemTimeToTzSpecificLocalTime(i, i, i) i'
  136.  
  137. !define syslstrlen 'kernel32::lstrlenA(t) i'
  138.  
  139. ; int wsprintf(LPTSTR lpOut, LPCTSTR lpFmt, ...);
  140. !define syswsprintf "user32::wsprintfA(t, t) i ? c" 
  141.  
  142. ; ------------- Structures --------------
  143.  
  144. ; typedef struct _WNDCLASS { 
  145. ;               UINT       style; 
  146. ;               WNDPROC    lpfnWndProc; 
  147. ;               int        cbClsExtra; 
  148. ;               int        cbWndExtra; 
  149. ;               HINSTANCE  hInstance; 
  150. ;               HICON      hIcon; 
  151. ;               HCURSOR    hCursor; 
  152. ;               HBRUSH     hbrBackground;
  153. ;               LPCTSTR    lpszMenuName; 
  154. ;               LPCTSTR    lpszClassName; 
  155. ; } WNDCLASS, *PWNDCLASS; 
  156. !define stWNDCLASS "(i, k, i, i, i, i, i, i, t, t) i"
  157.  
  158. ; typedef struct tagMSG {
  159. ;   HWND   hwnd; 
  160. ;   UINT   message; 
  161. ;   WPARAM wParam; 
  162. ;   LPARAM lParam; 
  163. ;   DWORD  time; 
  164. ;   POINT  pt;  -> will be presented as two separate px and py
  165. ; } MSG, *PMSG;
  166. !define stMSG "(i, i, i, i, i, i, i) i"
  167.  
  168. ; typedef struct tagBITMAP {
  169. ;   LONG   bmType; 
  170. ;   LONG   bmWidth; 
  171. ;   LONG   bmHeight; 
  172. ;   LONG   bmWidthBytes; 
  173. ;   WORD   bmPlanes; 
  174. ;   WORD   bmBitsPixel; 
  175. ;   LPVOID bmBits; 
  176. ; } BITMAP, *PBITMAP; 
  177. !define stBITMAP "(i, i, i, i, i, i, i) i"
  178.  
  179. ; typedef struct _RECT { 
  180. ;   LONG left; 
  181. ;   LONG top; 
  182. ;   LONG right; 
  183. ;   LONG bottom; 
  184. ; } RECT, *PRECT; 
  185. !define stRECT "(i, i, i, i) i"
  186.  
  187. ; typedef struct tagPAINTSTRUCT { 
  188. ;   HDC  hdc; 
  189. ;   BOOL fErase; 
  190. ;   RECT rcPaint; (rcl, rct, rcr, rcb)
  191. ;   BOOL fRestore; 
  192. ;   BOOL fIncUpdate; 
  193. ;   BYTE rgbReserved[32]; 
  194. ; } PAINTSTRUCT, *PPAINTSTRUCT; 
  195. !define stPAINTSTRUCT "(i, i, i, i, i, i, i, i, &v32) i"
  196.  
  197. ; typedef struct { 
  198. ;  UINT      cbSize; 
  199. ;  HWND      hwndOwner; 
  200. ;  HINSTANCE hInstance; 
  201. ;  LPCTSTR   lpszText; 
  202. ;  LPCTSTR   lpszCaption; 
  203. ;  DWORD     dwStyle; 
  204. ;  LPCTSTR   lpszIcon; 
  205. ;  DWORD_PTR dwContextHelpId; 
  206. ;  MSGBOXCALLBACK lpfnMsgBoxCallback; 
  207. ;  DWORD     dwLanguageId; 
  208. ; } MSGBOXPARAMS, *PMSGBOXPARAMS; 
  209. !define stMSGBOXPARAMS '(&l4, i, i, t, t, i, t, i, k, i) i'
  210.  
  211. ; typedef struct _SYSTEMTIME { 
  212. ;    WORD wYear; 
  213. ;    WORD wMonth; 
  214. ;    WORD wDayOfWeek; 
  215. ;    WORD wDay; 
  216. ;    WORD wHour; 
  217. ;    WORD wMinute; 
  218. ;    WORD wSecond; 
  219. ;    WORD wMilliseconds; 
  220. ; } SYSTEMTIME, *PSYSTEMTIME; 
  221. !define stSYSTEMTIME '(&i2, &i2, &i2, &i2, &i2, &i2, &i2, &i2) i'
  222.  
  223. ; Maximal windows path
  224. !define MAX_PATH          260
  225.  
  226. ; typedef struct _WIN32_FIND_DATA {
  227. ;  DWORD    dwFileAttributes; 
  228. ;  FILETIME ftCreationTime; 
  229. ;  FILETIME ftLastAccessTime; 
  230. ;  FILETIME ftLastWriteTime; 
  231. ;  DWORD    nFileSizeHigh; 
  232. ;  DWORD    nFileSizeLow; 
  233. ;  DWORD    dwReserved0; 
  234. ;  DWORD    dwReserved1; 
  235. ;  TCHAR    cFileName[ MAX_PATH ]; 
  236. ;  TCHAR    cAlternateFileName[ 14 ]; 
  237. ; } WIN32_FIND_DATA, *PWIN32_FIND_DATA; 
  238. !define stWIN32_FIND_DATA '(i, l, l, l, i, i, i, i, &t${MAX_PATH}, &t14) i'
  239.  
  240. ; ------------- Constants --------------
  241.  
  242. ; == Other ==
  243. !define INVALID_HANDLE_VALUE -1
  244.  
  245. ; == Cursors ==
  246.  
  247. !define IDC_ARROW           32512
  248. !define IDC_IBEAM           32513
  249. !define IDC_WAIT            32514
  250. !define IDC_CROSS           32515
  251. !define IDC_UPARROW         32516
  252. !define IDC_SIZE            32640  
  253. !define IDC_ICON            32641  
  254. !define IDC_SIZENWSE        32642
  255. !define IDC_SIZENESW        32643
  256. !define IDC_SIZEWE          32644
  257. !define IDC_SIZENS          32645
  258. !define IDC_SIZEALL         32646
  259. !define IDC_NO              32648 
  260. !define IDC_HAND            32649
  261. !define IDC_APPSTARTING     32650 
  262. !define IDC_HELP            32651
  263.  
  264. ; == Images ==
  265.  
  266. !define IMAGE_BITMAP        0
  267. !define IMAGE_ICON          1
  268. !define IMAGE_CURSOR        2
  269. !define IMAGE_ENHMETAFILE   3
  270.  
  271. !define LR_DEFAULTCOLOR     0x0000
  272. !define LR_MONOCHROME       0x0001
  273. !define LR_COLOR            0x0002
  274. !define LR_COPYRETURNORG    0x0004
  275. !define LR_COPYDELETEORG    0x0008
  276. !define LR_LOADFROMFILE     0x0010
  277. !define LR_LOADTRANSPARENT  0x0020
  278. !define LR_DEFAULTSIZE      0x0040
  279. !define LR_VGACOLOR         0x0080
  280. !define LR_LOADMAP3DCOLORS  0x1000
  281. !define LR_CREATEDIBSECTION 0x2000
  282. !define LR_COPYFROMRESOURCE 0x4000
  283. !define LR_SHARED           0x8000
  284.  
  285. ; == Sounds ==
  286.  
  287. !define SND_SYNC            0x0000  
  288. !define SND_ASYNC           0x0001  
  289. !define SND_NODEFAULT       0x0002  
  290. !define SND_MEMORY          0x0004  
  291. !define SND_LOOP            0x0008  
  292. !define SND_NOSTOP          0x0010  
  293.  
  294. !define SND_NOWAIT      0x00002000
  295. !define SND_ALIAS       0x00010000 
  296. !define SND_ALIAS_ID    0x00110000 
  297. !define SND_FILENAME    0x00020000
  298. !define SND_RESOURCE    0x00040004 
  299. !define SND_PURGE           0x0040  
  300. !define SND_APPLICATION     0x0080  
  301.  
  302. ; == Windows ==
  303.  
  304. !define WS_OVERLAPPED       0x00000000
  305. !define WS_POPUP            0x80000000
  306. !define WS_CHILD            0x40000000
  307. !define WS_MINIMIZE         0x20000000
  308. !define WS_VISIBLE          0x10000000
  309. !define WS_DISABLED         0x08000000
  310. !define WS_CLIPSIBLINGS     0x04000000
  311. !define WS_CLIPCHILDREN     0x02000000
  312. !define WS_MAXIMIZE         0x01000000
  313. !define WS_CAPTION          0x00C00000    
  314. !define WS_BORDER           0x00800000
  315. !define WS_DLGFRAME         0x00400000
  316. !define WS_VSCROLL          0x00200000
  317. !define WS_HSCROLL          0x00100000
  318. !define WS_SYSMENU          0x00080000
  319. !define WS_THICKFRAME       0x00040000
  320. !define WS_GROUP            0x00020000
  321. !define WS_TABSTOP          0x00010000
  322. !define WS_MINIMIZEBOX      0x00020000
  323. !define WS_MAXIMIZEBOX      0x00010000
  324. !define WS_TILED            ${WS_OVERLAPPED}
  325. !define WS_ICONIC           ${WS_MINIMIZE}
  326. !define WS_SIZEBOX          ${WS_THICKFRAME}
  327. !define WS_OVERLAPPEDWINDOW 0x00CF0000
  328. !define WS_TILEDWINDOW      ${WS_OVERLAPPEDWINDOW}
  329. !define WS_POPUPWINDOW      0x80880000
  330. !define WS_CHILDWINDOW      ${WS_CHILD}
  331. !define WS_EX_DLGMODALFRAME     0x00000001
  332. !define WS_EX_NOPARENTNOTIFY    0x00000004
  333. !define WS_EX_TOPMOST           0x00000008
  334. !define WS_EX_ACCEPTFILES       0x00000010
  335. !define WS_EX_TRANSPARENT       0x00000020
  336. !define WS_EX_MDICHILD          0x00000040
  337. !define WS_EX_TOOLWINDOW        0x00000080
  338. !define WS_EX_WINDOWEDGE        0x00000100
  339. !define WS_EX_CLIENTEDGE        0x00000200
  340. !define WS_EX_CONTEXTHELP       0x00000400
  341. !define WS_EX_RIGHT             0x00001000
  342. !define WS_EX_LEFT              0x00000000
  343. !define WS_EX_RTLREADING        0x00002000
  344. !define WS_EX_LTRREADING        0x00000000
  345. !define WS_EX_LEFTSCROLLBAR     0x00004000
  346. !define WS_EX_RIGHTSCROLLBAR    0x00000000
  347. !define WS_EX_CONTROLPARENT     0x00010000
  348. !define WS_EX_STATICEDGE        0x00020000
  349. !define WS_EX_APPWINDOW         0x00040000
  350. !define WS_EX_OVERLAPPEDWINDOW  0x00000300
  351. !define WS_EX_PALETTEWINDOW     0x00000188
  352. !define WS_EX_LAYERED           0x00080000
  353. !define WS_EX_NOINHERITLAYOUT   0x00100000 
  354. !define WS_EX_LAYOUTRTL         0x00400000 
  355. !define WS_EX_COMPOSITED        0x02000000
  356. !define WS_EX_NOACTIVATE        0x08000000
  357.  
  358.  
  359. ; == System Parameters Info ==
  360.  
  361. !define SPI_GETWORKAREA             0x0030
  362.  
  363. ; == Window Long Offsets ==
  364.  
  365. !define GWL_WNDPROC         -4
  366. !define GWL_HINSTANCE       -6
  367. !define GWL_HWNDPARENT      -8
  368. !define GWL_STYLE           -16
  369. !define GWL_EXSTYLE         -20
  370. !define GWL_USERDATA        -21
  371. !define GWL_ID              -12
  372.  
  373. ; == Window swap ==
  374.  
  375. !define SWP_NOSIZE          0x0001
  376. !define SWP_NOMOVE          0x0002
  377. !define SWP_NOZORDER        0x0004
  378. !define SWP_NOREDRAW        0x0008
  379. !define SWP_NOACTIVATE      0x0010
  380. !define SWP_FRAMECHANGED    0x0020  
  381. !define SWP_SHOWWINDOW      0x0040
  382. !define SWP_HIDEWINDOW      0x0080
  383. !define SWP_NOCOPYBITS      0x0100
  384. !define SWP_NOOWNERZORDER   0x0200  
  385. !define SWP_NOSENDCHANGING  0x0400  
  386.  
  387. !define SWP_DRAWFRAME       ${SWP_FRAMECHANGED}
  388. !define SWP_NOREPOSITION    ${SWP_NOOWNERZORDER}
  389. !define SWP_DEFERERASE      0x2000
  390. !define SWP_ASYNCWINDOWPOS  0x4000
  391.  
  392. ; == Bit Copy ==
  393.  
  394. !define SRCCOPY             0x00CC0020 
  395. !define SRCPAINT            0x00EE0086 
  396. !define SRCAND              0x008800C6 
  397. !define SRCINVERT           0x00660046 
  398. !define SRCERASE            0x00440328 
  399. !define NOTSRCCOPY          0x00330008 
  400. !define NOTSRCERASE         0x001100A6 
  401. !define MERGECOPY           0x00C000CA 
  402. !define MERGEPAINT          0x00BB0226 
  403. !define PATCOPY             0x00F00021 
  404. !define PATPAINT            0x00FB0A09 
  405. !define PATINVERT           0x005A0049 
  406. !define DSTINVERT           0x00550009 
  407. !define BLACKNESS           0x00000042 
  408. !define WHITENESS           0x00FF0062 
  409.  
  410. ; == Message Box ==
  411.  
  412. !define MB_OK                       0x00000000
  413. !define MB_OKCANCEL                 0x00000001
  414. !define MB_ABORTRETRYIGNORE         0x00000002
  415. !define MB_YESNOCANCEL              0x00000003
  416. !define MB_YESNO                    0x00000004
  417. !define MB_RETRYCANCEL              0x00000005
  418. !define MB_CANCELTRYCONTINUE        0x00000006
  419. !define MB_ICONHAND                 0x00000010
  420. !define MB_ICONQUESTION             0x00000020
  421. !define MB_ICONEXCLAMATION          0x00000030
  422. !define MB_ICONASTERISK             0x00000040
  423. !define MB_USERICON                 0x00000080
  424. !define MB_ICONWARNING              ${MB_ICONEXCLAMATION}
  425. !define MB_ICONERROR                ${MB_ICONHAND}
  426.  
  427. !define MB_ICONINFORMATION          ${MB_ICONASTERISK}
  428. !define MB_ICONSTOP                 ${MB_ICONHAND}
  429.  
  430. !define MB_DEFBUTTON1               0x00000000
  431. !define MB_DEFBUTTON2               0x00000100
  432. !define MB_DEFBUTTON3               0x00000200
  433. !define MB_DEFBUTTON4               0x00000300
  434.  
  435. !define MB_APPLMODAL                0x00000000
  436. !define MB_SYSTEMMODAL              0x00001000
  437. !define MB_TASKMODAL                0x00002000
  438. !define MB_HELP                     0x00004000
  439.  
  440. !define MB_NOFOCUS                  0x00008000
  441. !define MB_SETFOREGROUND            0x00010000
  442. !define MB_DEFAULT_DESKTOP_ONLY     0x00020000
  443.  
  444. !define MB_TOPMOST                  0x00040000
  445. !define MB_RIGHT                    0x00080000
  446. !define MB_RTLREADING               0x00100000
  447.  
  448. ; == Drive type constants ==
  449.  
  450. !define DRIVE_UNKNOWN     0
  451. !define DRIVE_NO_ROOT_DIR 1
  452. !define DRIVE_REMOVABLE   2
  453. !define DRIVE_FIXED       3
  454. !define DRIVE_REMOTE      4
  455. !define DRIVE_CDROM       5
  456. !define DRIVE_RAMDISK     6
  457.  
  458. ; == Callbacks ==
  459.  
  460. !macro SINGLE_CALLBACK CHKN RES INDEX FUNC
  461. CheckCB_${CHKN}:
  462.         Pop ${RES}
  463.         StrCmp ${RES} "callback${INDEX}" 0 ExitCB_${CHKN}
  464.         Call ${FUNC}
  465.         Goto CheckCB_${CHKN}
  466. ExitCB_${CHKN}:
  467. !macroend
  468.  
  469. !verbose 4
  470.  
  471. !endif