.
authorWerner Koch <wk@gnupg.org>
Mon, 28 Nov 2005 15:46:19 +0000 (15:46 +0000)
committerWerner Koch <wk@gnupg.org>
Mon, 28 Nov 2005 15:46:19 +0000 (15:46 +0000)
12 files changed:
ChangeLog
NEWS
src/Makefile.am
src/exdll.h
src/g4wihelp.c
src/g4wihelp.nsi
src/inst-gpa.nsi
src/inst-gpgol.nsi
src/inst-man_advanced_de.nsi
src/inst-man_novice_de.nsi
src/inst-sections.nsi
src/installer.nsi

index f702add..3ddc4cc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2005-11-28  Werner Koch  <wk@g10code.com>
+
+       * src/Makefile.am: Reduced verbosity level of makensis.
+
+       * src/exdll.h: Adapted license to the NSIS one.
+       (popstring): Add arg MAXLEN.
+       * src/g4wihelp.c (playsound, stopsound): New.
+       (splash_wndproc, showsplash): New.
+       * src/inst-sections.nsi (.onInit): Use our new g4wihelp functions.
+       (-startmenu): Translate the startmenu entries for the manuals.
+
+       * src/installer.nsi (ReserveFile): Removed advsplash.
+
+       * src/inst-gpa.nsi: Uppercase section name.
+
+       * src/inst-man_novice_de.nsi, src/inst-man_advanced_de.nsi:
+       Translate section name.
+
+       * src/inst-gpgol.nsi: Try to register even on overwrite failure.
+
 2005-11-24  Werner Koch  <wk@g10code.com>
 
        Released 0.2.0.
diff --git a/NEWS b/NEWS
index 7c43269..ac5ad75 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,12 @@
 Noteworthy changes in version 0.2.1
 ------------------------------------------------
 
+  * Translated the displayed names of the manuals in the package
+    selection.  
+
+  * Removed splash.dlle by code put into our helper DLL.  The tune is
+    not anymore cut off to early.
+
 
 Noteworthy changes in version 0.2.0 (2005-11-24)
 ------------------------------------------------
index ed62193..fdaee46 100644 (file)
@@ -182,15 +182,16 @@ common_nsi := inst-sections.nsi installer.nsi installer-finish.nsi        \
 # So we have to pull a couple of strings to correct this.
 gpg4win-$(VERSION).exe: gpg4win.nsi $(common_nsi) stamps/stamp-final \
                         g4wihelp.dll
-       $(MAKENSIS) -DBUILD_DIR=`pwd` -DTOP_SRCDIR=$(top_srcdir) \
+       $(MAKENSIS) -V3 -DBUILD_DIR=`pwd` -DTOP_SRCDIR=$(top_srcdir) \
                -DSRCDIR=$(srcdir) $(srcdir)/gpg4win.nsi
 
 gpg4win-src-$(VERSION).exe: gpg4win-src.nsi $(common_nsi) stamps/stamp-final
-       $(MAKENSIS) -DBUILD_DIR=`pwd` -DTOP_SRCDIR=$(top_srcdir) \
+       $(MAKENSIS) -V3 -DBUILD_DIR=`pwd` -DTOP_SRCDIR=$(top_srcdir) \
                -DSRCDIR=$(srcdir) $(srcdir)/gpg4win-src.nsi
 
 g4wihelp.dll: g4wihelp.c exdll.h
-       $(CC) -I. -shared -O2 -o g4wihelp.dll $(srcdir)/g4wihelp.c
+       $(CC) -I. -shared -O2 -o g4wihelp.dll $(srcdir)/g4wihelp.c \
+          -lwinmm -lgdi32
 
 all-local: gpg4win-$(VERSION).exe gpg4win-src-$(VERSION).exe
 
index 71b2dad..a32ed20 100644 (file)
@@ -53,7 +53,7 @@ static unsigned int g_stringsize;
 static stack_t **g_stacktop;
 static char *g_variables;
 
-static int __stdcall popstring(char *str); /* 0 on success, 1 on empty stack */
+static int __stdcall popstring(char *str, size_t maxlen); /* 0 on success, 1 on empty stack */
 static void __stdcall pushstring(const char *str);
 
 enum
@@ -106,14 +106,16 @@ typedef struct {
   int (__stdcall *ExecuteCodeSegment)(int, HWND);
 } extra_parameters_t;
 
-// utility functions (not required but often useful)
+
+/* Utility functions (not required but often useful). */
 static int __stdcall 
-popstring(char *str)
+popstring(char *str, size_t maxlen)
 {
   stack_t *th;
-  if (!g_stacktop || !*g_stacktop) return 1;
+  if (!g_stacktop || !*g_stacktop) 
+    return 1;
   th=(*g_stacktop);
-  lstrcpy(str,th->text);
+  lstrcpyn (str, th->text, maxlen);
   *g_stacktop = th->next;
   GlobalFree((HGLOBAL)th);
   return 0;
index 3b044bc..7afb859 100644 (file)
@@ -1,20 +1,40 @@
 /* g4wihelp.c - NSIS Helper DLL used with gpg4win. -*- coding: latin-1; -*-
  * Copyright (C) 2005 g10 Code GmbH
+ * Copyright (C) 2001 Justin Frankel
  * 
- * This file is free software; as a special exception the author gives
- * unlimited permission to copy and/or distribute it, with or without
- * modifications, as long as this notice is preserved.
- *
- * This file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any
+ * damages arising from the use of this software.
+ * 
+ * Permission is granted to anyone to use this software for any
+ * purpose, including commercial applications, and to alter it and
+ * redistribute it freely, subject to the following restrictions:
+ * 
+ * 1. The origin of this software must not be misrepresented; you must
+ *    not claim that you wrote the original software. If you use this
+ *    software in a product, an acknowledgment in the product
+ *    documentation would be appreciated but is not required.
+ * 
+ * 2. Altered source versions must be plainly marked as such, and must
+ *    not be misrepresented as being the original software.
+ * 
+ * 3. This notice may not be removed or altered from any source
+ *    distribution.
+ ************************************************************
+ * The code for the splash screen has been taken from the Splash
+ * plugin of the NSIS 2.04 distribution.  That code comes without
+ * explicit copyright notices in tyhe source files or author names, it
+ * seems that it has been written by Justin Frankel; not sure about
+ * the year, though. [wk 2005-11-28]
  */
 
 #include <windows.h>
 #include "exdll.h"
 
-static HINSTANCE g_hInstance;
-static HWND g_hwndParent;
+static HINSTANCE g_hInstance; /* Our Instance. */
+static HWND g_hwndParent;     /* Handle of parent window or NULL. */
+static HBITMAP g_hbm;         /* Handle of the splash image. */ 
+static int sleepint;          /* Milliseconds to show the spals image. */
 
 
 /* Standard entry point for DLLs. */
@@ -94,3 +114,155 @@ runonce (HWND hwndParent, int string_size, char *variables,
 }
 
 
+void __declspec(dllexport) 
+playsound (HWND hwndParent, int string_size, char *variables, 
+           stack_t **stacktop, extra_parameters_t *extra)
+{
+  char fname[MAX_PATH];
+
+  g_hwndParent = hwndParent;
+  EXDLL_INIT();
+
+  if (popstring(fname, sizeof fname))
+    return;
+  PlaySound (fname, NULL, SND_ASYNC|SND_FILENAME|SND_NODEFAULT);
+}
+
+
+void __declspec(dllexport) 
+stopsound (HWND hwndParent, int string_size, char *variables, 
+           stack_t **stacktop, extra_parameters_t *extra)
+{
+  g_hwndParent = hwndParent;
+  EXDLL_INIT();
+  PlaySound (NULL, NULL, 0);
+}
+
+
+/* Windows procedure to control the splashimage.  This one pauses the
+   execution until the sleep time is over or the user closes this
+   windows. */
+static LRESULT CALLBACK 
+splash_wndproc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+  LRESULT result = 0;
+
+  switch (uMsg)
+    {
+    case WM_CREATE:
+      {
+        BITMAP bm;
+        RECT vp;
+
+        GetObject(g_hbm, sizeof(bm), (LPSTR)&bm);
+        SystemParametersInfo(SPI_GETWORKAREA, 0, &vp, 0);
+        SetWindowLong(hwnd,GWL_STYLE,0);
+        SetWindowPos(hwnd,NULL,
+                     vp.left+(vp.right-vp.left-bm.bmWidth)/2,
+                     vp.top+(vp.bottom-vp.top-bm.bmHeight)/2,
+                     bm.bmWidth,bm.bmHeight,
+                     SWP_NOZORDER);
+        ShowWindow(hwnd,SW_SHOW);
+        SetTimer(hwnd,1,sleepint,NULL);
+      }
+      break;
+  
+    case WM_PAINT:
+      {
+        PAINTSTRUCT ps;
+        RECT r;
+        HDC curdc=BeginPaint(hwnd,&ps);
+        HDC hdc=CreateCompatibleDC(curdc);
+        HBITMAP oldbm;
+        GetClientRect(hwnd,&r);
+        oldbm=(HBITMAP)SelectObject(hdc,g_hbm);
+        BitBlt(curdc,r.left,r.top,r.right-r.left,r.bottom-r.top,
+               hdc,0,0,SRCCOPY);
+        SelectObject(hdc,oldbm);
+        DeleteDC(hdc);
+        EndPaint(hwnd,&ps);
+      }
+      break;
+
+    case WM_CLOSE:
+      break;
+
+    case WM_TIMER:
+    case WM_LBUTTONDOWN:
+      DestroyWindow(hwnd);
+      /*(fall through)*/
+    default:
+      result =  DefWindowProc (hwnd, uMsg, wParam, lParam);
+    }
+
+  return result;
+}
+
+
+/* Display a splash screen.  Call as
+
+     g4wihelp::showsplash SLEEP FNAME
+
+   With SLEEP being the time in milliseconds to show the splashscreen
+   and FNAME the complete filename of the image.  As of now only BMP
+   is supported.
+*/
+void __declspec(dllexport) 
+showsplash (HWND hwndParent, int string_size, char *variables, 
+           stack_t **stacktop, extra_parameters_t *extra)
+{
+  static WNDCLASS wc;
+  char sleepstr[30];
+  char fname[MAX_PATH];
+  int err = 0;
+  char *p;
+  char classname[] = "_sp";
+
+  g_hwndParent = hwndParent;
+  EXDLL_INIT();
+  if (popstring(sleepstr, sizeof sleepstr))
+    err = 1;
+  if (popstring(fname, sizeof fname))
+    err = 1;
+  if (err)
+    return;
+
+  if (!*fname)
+    return; /* Nothing to do. */
+
+  for (sleepint=0, p=sleepstr; *p >= '0' && *p <= '9'; p++)
+    {
+      sleepint *= 10;
+      sleepint += *p - '0';
+    }
+  if (sleepint <= 0)
+    return; /* Nothing to do. */
+
+  wc.lpfnWndProc = splash_wndproc;
+  wc.hInstance = g_hInstance;
+  wc.hCursor = LoadCursor(NULL,IDC_ARROW);
+  wc.lpszClassName = classname;
+  if (!RegisterClass(&wc)) 
+    return; /* Error. */
+
+  g_hbm = LoadImage (NULL, fname, IMAGE_BITMAP,
+                     0, 0 , LR_CREATEDIBSECTION|LR_LOADFROMFILE);
+  if (g_hbm) 
+    {
+      MSG msg;
+      HWND hwnd;
+
+      hwnd = CreateWindowEx (WS_EX_TOOLWINDOW, classname, classname,
+                             0, 0, 0, 0, 0, (HWND)hwndParent, NULL,
+                             g_hInstance, NULL);
+      
+      while (IsWindow(hwnd) && GetMessage ( &msg, hwnd, 0, 0))
+        {
+          DispatchMessage (&msg);
+        }
+
+      DeleteObject (g_hbm);
+      g_hbm = NULL;
+    }
+  UnregisterClass (classname, g_hInstance);
+}
index 7eeff00..faab6b8 100644 (file)
@@ -44,3 +44,4 @@ Function G4wRunOnce
   Pop $R0
 FunctionEnd
 
+
index 4b9032d..a5626b1 100644 (file)
@@ -24,7 +24,7 @@
 !define prefix ${ipdir}/gpa-${gpg4win_pkg_gpa_version}
 
 
-Section "gpa" SEC_gpa
+Section "GPA" SEC_gpa
   SetOutPath "$INSTDIR"
 !ifdef SOURCES
   File "${gpg4win_pkg_gpa}"
index a294470..bf5dfbf 100644 (file)
@@ -33,10 +33,11 @@ Section "GPGol" SEC_gpgol
   SetOverwrite try
   File ${prefix}/bin/gpgol.dll
   SetOverwrite lastused
-  ifErrors 0 +4
+  ifErrors 0 do_reg
       File /oname=gpgol.dll.tmp ${prefix}/bin/gpgol.dll
       Rename /REBOOTOK gpgol.dll.tmp gpgol.dll
 
+ do_reg:
   # Register the DLL.
   RegDLL "$INSTDIR\gpgol.dll"
   ifErrors 0 +2
index 2258c55..02109c0 100644 (file)
@@ -24,7 +24,7 @@
 !define prefix ${ipdir}/man_advanced_de-${gpg4win_pkg_man_advanced_de_version}
 
 
-Section "Advanced Manual (de)" SEC_man_advanced_de
+Section "$(DESC_Name_man_advanced_de)" SEC_man_advanced_de
   SetOutPath "$INSTDIR"
 !ifdef SOURCES
   File "${gpg4win_pkg_man_advanced_de}"
@@ -36,6 +36,11 @@ Section "Advanced Manual (de)" SEC_man_advanced_de
 SectionEnd
 
 
+LangString DESC_Name_man_advanced_de ${LANG_ENGLISH} \
+   "Advanced Manual (German)"
+LangString DESC_Name_man_advanced_de ${LANG_GERMAN} \
+   "Durchblickerhandbuch"
+
 LangString DESC_SEC_man_advanced_de ${LANG_ENGLISH} \
    "Gpg4Win Manual for the Advanced User (German)"
 LangString DESC_SEC_man_advanced_de ${LANG_GERMAN} \
index 65a2601..a048f90 100644 (file)
@@ -24,7 +24,7 @@
 !define prefix ${ipdir}/man_novice_de-${gpg4win_pkg_man_novice_de_version}
 
 
-Section "Novice Manual (de)" SEC_man_novice_de
+Section "$(DESC_Name_man_novice_de)" SEC_man_novice_de
   SetOutPath "$INSTDIR"
 !ifdef SOURCES
   File "${gpg4win_pkg_man_novice_de}"
@@ -36,6 +36,11 @@ Section "Novice Manual (de)" SEC_man_novice_de
 SectionEnd
 
 
+LangString DESC_Name_man_novice_de ${LANG_ENGLISH} \
+   "Novice Manual (German)"
+LangString DESC_Name_man_novice_de ${LANG_GERMAN} \
+   "Einsteigerhandbuch"
+
 LangString DESC_SEC_man_novice_de ${LANG_ENGLISH} \
    "Gpg4Win Manual for the Novice User (German)"
 LangString DESC_SEC_man_novice_de ${LANG_GERMAN} \
index 2b24a96..400ae14 100644 (file)
@@ -358,10 +358,11 @@ Function .onInit
   SetOutPath $TEMP
   File /oname=gpgspltmp.bmp "${TOP_SRCDIR}/src/gpg4win-splash.bmp"
   File /oname=gpgspltmp.wav "${TOP_SRCDIR}/src/gpg4win-splash.wav"
-  advsplash::show 3000 600 400 -1 $TEMP\gpgspltmp
-  Pop $0 # $0 has '1' if the user closed the splash screen early,
-         # '0' if everything closed normal, and '-1' if some error occured.
-  Delete $TEMP\gpgspltmp.wav
+  g4wihelp::playsound $TEMP\gpgspltmp.wav
+  g4wihelp::showsplash 3000 $TEMP\gpgspltmp.bmp
+
+  #FIXME: Ned to delete the WAV later.
+  #Delete $TEMP\gpgspltmp.wav
   Delete $TEMP\gpgspltmp.bmp
 
   Call CalcDepends
@@ -463,7 +464,8 @@ Section "-startmenu"
     SectionGetFlags ${SEC_man_novice_de} $R0 
     IntOp $R0 $R0 & ${SF_SELECTED} 
     IntCmp $R0 ${SF_SELECTED} 0 no_man_novice_de_menu 
-    CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Novice Manual.lnk" \
+    CreateShortCut \
+        "$SMPROGRAMS\$STARTMENU_FOLDER\$(DESC_Name_man_novice_de).lnk" \
        "$INSTDIR\share\gpg4win\man_novice_de.html" \
         "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_man_novice_de)
   no_man_novice_de_menu:
@@ -473,7 +475,8 @@ Section "-startmenu"
     SectionGetFlags ${SEC_man_advanced_de} $R0 
     IntOp $R0 $R0 & ${SF_SELECTED} 
     IntCmp $R0 ${SF_SELECTED} 0 no_man_advanced_de_menu 
-    CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Advanced Manual.lnk" \
+    CreateShortCut \
+        "$SMPROGRAMS\$STARTMENU_FOLDER\$(DESC_Name_man_advanced_de).lnk" \
        "$INSTDIR\share\gpg4win\man_novice_de.html" \
         "" "" "" SW_SHOWNORMAL "" $(DESC_Menu_man_advanced_de)
   no_man_advanced_de_menu:
index 542a82e..3bb23d0 100644 (file)
@@ -150,7 +150,6 @@ Var STARTMENU_FOLDER
 
 !insertmacro MUI_RESERVEFILE_LANGDLL
 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
-ReserveFile "${NSISDIR}\Plugins\advsplash.dll"
 ReserveFile "${BUILD_DIR}\g4wihelp.dll"
 ReserveFile "${TOP_SRCDIR}\src\gpg4win-splash.bmp"
 ReserveFile "${TOP_SRCDIR}\src\gpg4win-splash.wav"