diff -ruN plugins.old/exdll.h plugins/exdll.h
--- plugins.old/exdll.h 1970-01-01 08:00:00.000000000 +0800
+++ plugins/exdll.h 2010-01-11 18:43:50.751354626 +0800
@@ -0,0 +1,137 @@
+#ifndef _EXDLL_H_
+#define _EXDLL_H_
+
+
+
+
+
+//
+// only include this file from one place in your DLL.
+// (it is all static, if you use it in two places it will fail)
+//
+#define EXDLL_INIT() { \
+ g_stringsize = string_size; \
+ g_stacktop = stacktop; \
+ g_variables = variables; }
+
+
+
+
+//
+// For page showing plug-ins
+//
+#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8)
+#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd)
+#define NOTIFY_BYE_BYE 'x'
+
+typedef struct _stack_t
+{
+ struct _stack_t *next;
+ char text[1]; // this should be the length of string_size
+} stack_t;
+
+
+static unsigned int g_stringsize;
+static stack_t **g_stacktop;
+static char *g_variables;
+
+enum
+{
+INST_0, // $0
+INST_1, // $1
+INST_2, // $2
+INST_3, // $3
+INST_4, // $4
+INST_5, // $5
+INST_6, // $6
+INST_7, // $7
+INST_8, // $8
+INST_9, // $9
+INST_R0, // $R0
+INST_R1, // $R1
+INST_R2, // $R2
+INST_R3, // $R3
+INST_R4, // $R4
+INST_R5, // $R5
+INST_R6, // $R6
+INST_R7, // $R7
+INST_R8, // $R8
+INST_R9, // $R9
+INST_CMDLINE, // $CMDLINE
+INST_INSTDIR, // $INSTDIR
+INST_OUTDIR, // $OUTDIR
+INST_EXEDIR, // $EXEDIR
+INST_LANG, // $LANGUAGE
+__INST_LAST
+};
+
+
+
+
+
+//
+// utility functions (not required but often useful)
+//
+static int popstring( char *str )
+{
+ stack_t *th;
+
+
+ if( !g_stacktop ||
+ !*g_stacktop )
+ return 1;
+
+ th = (*g_stacktop);
+ lstrcpy( str, th->text );
+ *g_stacktop = th->next;
+ GlobalFree( (HGLOBAL)th );
+
+ return 0;
+}
+
+
+
+
+static void pushstring( char *str )
+{
+ stack_t *th;
+
+
+ if( !g_stacktop )
+ return;
+
+ th = (stack_t*)GlobalAlloc( GPTR, sizeof(stack_t) + g_stringsize );
+ lstrcpyn( th->text, str, g_stringsize );
+ th->next = *g_stacktop;
+ *g_stacktop = th;
+}
+
+
+
+
+
+static char *getuservariable( int varnum )
+{
+ if( varnum < 0 ||
+ varnum >= __INST_LAST )
+ return NULL;
+
+ return (g_variables + varnum*g_stringsize);
+}
+
+
+
+
+
+static void setuservariable( int varnum, char *var )
+{
+ if( var != NULL &&
+ varnum >= 0 &&
+ varnum < __INST_LAST )
+ lstrcpy( g_variables + varnum*g_stringsize, var );
+}
+
+
+
+#endif//_EXDLL_H_
+
diff -ruN plugins.old/sm_cleanboot.c plugins/sm_cleanboot.c
--- plugins.old/sm_cleanboot.c 2010-01-11 18:35:55.715646433 +0800
+++ plugins/sm_cleanboot.c 2010-01-11 18:44:15.079370865 +0800
@@ -22,7 +22,7 @@
#include "exdll.h"
#endif
-void __declspec (dllexport) sm_cleanboot (HWND hwndParent, int string_size, char *variables, stack_t ** stacktop, extra_parameters * extra)
+void __declspec (dllexport) sm_cleanboot (HWND hwndParent, int string_size, char *variables, stack_t ** stacktop, ...)
{
EXDLL_INIT ();
This page has been viewed 317 times