Add custom plugin DLL
[gpg4win.git] / src / g4wihelp.c
1 /* g4wihelp.c - NSIS Helper DLL used with gpg4win. -*- coding: latin-1; -*-
2  * Copyright (C) 2005 g10 Code GmbH
3  * 
4  * This file is free software; as a special exception the author gives
5  * unlimited permission to copy and/or distribute it, with or without
6  * modifications, as long as this notice is preserved.
7  *
8  * This file is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
10  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  */
12
13 #include <windows.h>
14 #include "exdll.h"
15
16 static HINSTANCE g_hInstance;
17 static HWND g_hwndParent;
18
19
20 /* Standard entry point for DLLs. */
21 int WINAPI
22 DllMain (HANDLE hinst, DWORD reason, LPVOID reserved)
23 {
24    if (reason == DLL_PROCESS_ATTACH)
25      g_hInstance = hinst;
26    return TRUE;
27 }
28
29
30
31 /* Dummy function for testing. */
32 void __declspec(dllexport) 
33 dummy (HWND hwndParent, int string_size, char *variables, 
34        stack_t **stacktop, extra_parameters_t *extra)
35 {
36   g_hwndParent = hwndParent;
37
38   EXDLL_INIT();
39
40   // note if you want parameters from the stack, pop them off in order.
41   // i.e. if you are called via exdll::myFunction file.dat poop.dat
42   // calling popstring() the first time would give you file.dat,
43   // and the second time would give you poop.dat. 
44   // you should empty the stack of your parameters, and ONLY your
45   // parameters.
46
47   // do your stuff here
48   {
49     char buf[1024];
50     sprintf(buf,"$R0=%s\r\n$R1=%s\r\n",
51             getuservariable(INST_R0),
52             getuservariable(INST_R1));
53     MessageBox(g_hwndParent,buf,0,MB_OK);
54
55     sprintf (buf,
56              "autoclose    =%d\r\n"
57              "all_user_var =%d\r\n"
58              "exec_error   =%d\r\n"
59              "abort        =%d\r\n"
60              "exec_reboot  =%d\r\n"
61              "reboot_called=%d\r\n"
62              "silent       =%d\r\n"
63              "instdir_error=%d\r\n"
64              "rtl          =%d\r\n"
65              "errlvl       =%d\r\n",
66              extra->exec_flags->autoclose,
67              extra->exec_flags->all_user_var,
68              extra->exec_flags->exec_error,
69              extra->exec_flags->abort,
70              extra->exec_flags->exec_reboot,
71              extra->exec_flags->reboot_called,
72              extra->exec_flags->silent,
73              extra->exec_flags->instdir_error,
74              extra->exec_flags->rtl,
75              extra->exec_flags->errlvl);      
76     MessageBox(g_hwndParent,buf,0,MB_OK);
77   }
78 }
79
80
81
82 void __declspec(dllexport) 
83 runonce (HWND hwndParent, int string_size, char *variables, 
84          stack_t **stacktop, extra_parameters_t *extra)
85 {
86   const char *result;
87
88   g_hwndParent = hwndParent;
89   EXDLL_INIT();
90
91   CreateMutexA (NULL, 0, getuservariable(INST_R0));
92   result = GetLastError ()? "1":"0";
93   setuservariable (INST_R0, result);
94 }
95
96