other-licenses/nsis/Contrib/ExDLL/exdllutil.cpp

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/other-licenses/nsis/Contrib/ExDLL/exdllutil.cpp	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,131 @@
     1.4 +// Unicode support by Jim Park -- 08/23/2007
     1.5 +
     1.6 +#include <windows.h>
     1.7 +#include "exdllutil.h"
     1.8 +
     1.9 +// utility functions (not required but often useful)
    1.10 +static int __stdcall popstring(TCHAR *str)
    1.11 +{
    1.12 +  stack_t *th;
    1.13 +  if (!g_stacktop || !*g_stacktop) return 1;
    1.14 +  th=(*g_stacktop);
    1.15 +  lstrcpy(str,th->text);
    1.16 +  *g_stacktop = th->next;
    1.17 +  GlobalFree((HGLOBAL)th);
    1.18 +  return 0;
    1.19 +}
    1.20 +
    1.21 +static void __stdcall pushstring(const TCHAR *str)
    1.22 +{
    1.23 +  stack_t *th;
    1.24 +  if (!g_stacktop) return;
    1.25 +  th=(stack_t*)GlobalAlloc(GPTR,(sizeof(stack_t)+(g_stringsize)*sizeof(TCHAR)));
    1.26 +  lstrcpyn(th->text,str,g_stringsize);
    1.27 +  th->next=*g_stacktop;
    1.28 +  *g_stacktop=th;
    1.29 +}
    1.30 +
    1.31 +static TCHAR * __stdcall getuservariable(const int varnum)
    1.32 +{
    1.33 +  if (varnum < 0 || varnum >= __INST_LAST) return NULL;
    1.34 +  return g_variables+varnum*g_stringsize;
    1.35 +}
    1.36 +
    1.37 +static void __stdcall setuservariable(const int varnum, const TCHAR *var)
    1.38 +{
    1.39 +	if (var != NULL && varnum >= 0 && varnum < __INST_LAST) 
    1.40 +		lstrcpy(g_variables + varnum*g_stringsize, var);
    1.41 +}
    1.42 +
    1.43 +#ifdef _UNICODE
    1.44 +static int __stdcall PopStringA(char* ansiStr)
    1.45 +{
    1.46 +   wchar_t* wideStr = (wchar_t*) GlobalAlloc(GPTR, g_stringsize*sizeof(wchar_t));
    1.47 +   int rval = popstring(wideStr);
    1.48 +   WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
    1.49 +   GlobalFree((HGLOBAL)wideStr);
    1.50 +   return rval;
    1.51 +}
    1.52 +
    1.53 +static void __stdcall PushStringA(const char* ansiStr)
    1.54 +{
    1.55 +   wchar_t* wideStr = (wchar_t*) GlobalAlloc(GPTR, g_stringsize*sizeof(wchar_t));
    1.56 +   MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
    1.57 +   pushtring(wideStr);
    1.58 +   GlobalFree((HGLOBAL)wideStr);
    1.59 +   return;
    1.60 +}
    1.61 +
    1.62 +static void __stdcall GetUserVariableW(const int varnum, wchar_t* wideStr)
    1.63 +{
    1.64 +   lstrcpyW(wideStr, getuservariable(varnum));
    1.65 +}
    1.66 +
    1.67 +static void __stdcall GetUserVariableA(const int varnum, char* ansiStr)
    1.68 +{
    1.69 +   wchar_t* wideStr = getuservariable(varnum);
    1.70 +   WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
    1.71 +}
    1.72 +
    1.73 +static void __stdcall SetUserVariableA(const int varnum, const char* ansiStr)
    1.74 +{
    1.75 +   if (ansiStr != NULL && varnum >= 0 && varnum < __INST_LAST)
    1.76 +   {
    1.77 +      wchar_t* wideStr = g_variables + varnum * g_stringsize;
    1.78 +      MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
    1.79 +   }
    1.80 +}
    1.81 +
    1.82 +#else
    1.83 +// ANSI defs
    1.84 +static int __stdcall PopStringW(wchar_t* wideStr)
    1.85 +{
    1.86 +   char* ansiStr = (char*) GlobalAlloc(GPTR, g_stringsize);
    1.87 +   int rval = popstring(ansiStr);
    1.88 +   MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
    1.89 +   GlobalFree((HGLOBAL)ansiStr);
    1.90 +   return rval;
    1.91 +}
    1.92 +
    1.93 +static void __stdcall PushStringW(wchar_t* wideStr)
    1.94 +{
    1.95 +   char* ansiStr = (char*) GlobalAlloc(GPTR, g_stringsize);
    1.96 +   WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
    1.97 +   pushstring(ansiStr);
    1.98 +   GlobalFree((HGLOBAL)ansiStr);
    1.99 +}
   1.100 +
   1.101 +static void __stdcall GetUserVariableW(const int varnum, wchar_t* wideStr)
   1.102 +{
   1.103 +   char* ansiStr = getuservariable(varnum);
   1.104 +   MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
   1.105 +}
   1.106 +
   1.107 +static void __stdcall GetUserVariableA(const int varnum, char* ansiStr)
   1.108 +{
   1.109 +   lstrcpyA(ansiStr, getuservariable(varnum));
   1.110 +}
   1.111 +
   1.112 +static void __stdcall SetUserVariableW(const int varnum, const wchar_t* wideStr)
   1.113 +{
   1.114 +   if (wideStr != NULL && varnum >= 0 && varnum < __INST_LAST)
   1.115 +   {
   1.116 +      char* ansiStr = g_variables + varnum * g_stringsize;
   1.117 +      WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
   1.118 +   }
   1.119 +}
   1.120 +#endif
   1.121 +
   1.122 +static BOOL __stdcall IsUnicode(void)
   1.123 +{
   1.124 +#ifdef _UNICODE
   1.125 +   return TRUE;
   1.126 +#else
   1.127 +   return FALSE;
   1.128 +#endif
   1.129 +}
   1.130 +
   1.131 +static TCHAR* __stdcall AllocString()
   1.132 +{
   1.133 +   return (TCHAR*) GlobalAlloc(GPTR, g_stringsize*sizeof(TCHAR));
   1.134 +}

mercurial