+24Mar04
+- Apply corrected SQL to sql_get.c supplied by Dan Langille.
+- Implement "delete job jobid=xxx jobid=yyy ..."
+- Implemente "purge volume=xxx volume=yyy ..."
+- Fix buffer overrun in query string substitution.
+22Mar04
+- Fix bad format %s instead of %d for editing new slot in update volume.
+  Reported by Vadim Zotov.
+- Better error diagnostics in ./configure for detecting termcap library.
+20Mar04
+- Restore old sql.c split_path and file name since it seems to have
+  broken the Verify stuff.
 19Mar04
 - Hunt down missing free_locked_jcr() in SD that caused zombies.
 - Modify status outputs to be more consistent for zombie checking.
 
 
           Release Notes for Bacula 1.33.4
 
-  Bacula code: Total files = 301 Total lines = 89,118 (*.h *.c *.in)
+  Bacula code: Total files = 306 Total lines = 90,715 (*.h *.c *.in)
+
+Major Features:
+- Data spooling which eliminates tape shoe-shine during Inc backups,         
+  and permits multiple simultaneous backups without interleaved blocks.
+- Polling of devices eliminating need to unmount and mount from
+  console.
+- Native Win32 client -- much faster and restores permissions correctly
+  (thanks to Christopher Hull)
+- PostgreSQL database driver (thanks to Dan Langille).
+- Improved Autochange support of Slots (update slots scan).
+- Autochanger support for multiple drives.
+- New conio code to implement Console command line editing and history.
+- JobDefs resource permits smaller .conf files for Director
+- Access console lists for the Console
+- Pool level overrides.
+- Daemon statistics memory.
+- Improved btape "test" and "fill" commands.
 
 New directives:
 - "Close on Poll = yes/no" in SD Device resource.
 - "unmarkdir" command in restore tree.
 - "quit" command in restore tree.
 - Trace option on "setdebug trace=1/0 ..."
+- Update slots scan
 
 
-Most Significant Changes since 1.32f-4
-- Native Win32 Client -- much faster and does better restores than old
-  Cygwin Win32 Client.
+Additional changes:
 - Implement Gnome 2.0 restore GUI
-- Implement data spooling
-- Implement Volume Polling
 - Add a missing unlock in the jobq handler.
 - Fix bug where a soft linked file and a directory had the same name
   by treating the soft link as a directory and putting the entries under
 - Fixed seg fault in restore of multiple simultaneous jobs to 
   a single Volume.
 - Fixed thread race problem in multiple simultaneous jobs to
-  a single Volume where the volume lable is not in the first 
+  a single Volume where the volume label is not in the first 
   tape block, so the tape is not recognized.
-
-Other Changes since 1.32d
 - Restore directory tree automatically selects all higher level
   directories to be restored.
 - Implement conio.c to use in console program -- mini-readline.
 
           src/cats/drop_bacula_database \
           src/findlib/Makefile \
           src/tools/Makefile \
+          src/win32/winbacula.nsi \
+          src/win32/bacula-fd.conf \
+          src/win32/Makefile \
           $PFILES ],  
          [(echo "Doing make of dependencies"; make depend;) ]
 )
 
    exit 1
 fi
 
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ac_config_files="$ac_config_files autoconf/Make.common Makefile rescue/Makefile rescue/linux/Makefile rescue/freebsd/Makefile rescue/solaris/Makefile scripts/startmysql scripts/stopmysql scripts/btraceback scripts/startit scripts/stopit scripts/bconsole scripts/gconsole scripts/bacula scripts/devel_bacula scripts/fd scripts/Makefile scripts/logrotate scripts/bacula.desktop.gnome1 scripts/bacula.desktop.gnome2 scripts/mtx-changer doc/Makefile src/Makefile src/host.h src/console/Makefile src/console/bconsole.conf src/gnome-console/Makefile src/gnome-console/gnome-console.conf src/gnome2-console/Makefile src/gnome2-console/gnome-console.conf src/tconsole/Makefile src/dird/Makefile src/dird/bacula-dir.conf src/lib/Makefile src/stored/Makefile src/stored/bacula-sd.conf src/filed/Makefile src/filed/bacula-fd.conf src/filed/win32/Makefile src/cats/Makefile src/cats/make_catalog_backup src/cats/delete_catalog_backup src/cats/create_postgresql_database src/cats/update_postgresql_tables src/cats/make_postgresql_tables src/cats/grant_postgresql_privileges src/cats/drop_postgresql_tables src/cats/drop_postgresql_database src/cats/create_mysql_database src/cats/update_mysql_tables src/cats/make_mysql_tables src/cats/grant_mysql_privileges src/cats/drop_mysql_tables src/cats/drop_mysql_database src/cats/create_sqlite_database src/cats/update_sqlite_tables src/cats/make_sqlite_tables src/cats/grant_sqlite_privileges src/cats/drop_sqlite_tables src/cats/drop_sqlite_database src/cats/sqlite src/cats/mysql src/cats/create_bdb_database src/cats/update_bdb_tables src/cats/make_bdb_tables src/cats/grant_bdb_privileges src/cats/drop_bdb_tables src/cats/drop_bdb_database src/cats/create_bacula_database src/cats/update_bacula_tables src/cats/grant_bacula_privileges src/cats/make_bacula_tables src/cats/drop_bacula_tables src/cats/drop_bacula_database src/findlib/Makefile src/tools/Makefile $PFILES"
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ac_config_files="$ac_config_files autoconf/Make.common Makefile rescue/Makefile rescue/linux/Makefile rescue/freebsd/Makefile rescue/solaris/Makefile scripts/startmysql scripts/stopmysql scripts/btraceback scripts/startit scripts/stopit scripts/bconsole scripts/gconsole scripts/bacula scripts/devel_bacula scripts/fd scripts/Makefile scripts/logrotate scripts/bacula.desktop.gnome1 scripts/bacula.desktop.gnome2 scripts/mtx-changer doc/Makefile src/Makefile src/host.h src/console/Makefile src/console/bconsole.conf src/gnome-console/Makefile src/gnome-console/gnome-console.conf src/gnome2-console/Makefile src/gnome2-console/gnome-console.conf src/tconsole/Makefile src/dird/Makefile src/dird/bacula-dir.conf src/lib/Makefile src/stored/Makefile src/stored/bacula-sd.conf src/filed/Makefile src/filed/bacula-fd.conf src/filed/win32/Makefile src/cats/Makefile src/cats/make_catalog_backup src/cats/delete_catalog_backup src/cats/create_postgresql_database src/cats/update_postgresql_tables src/cats/make_postgresql_tables src/cats/grant_postgresql_privileges src/cats/drop_postgresql_tables src/cats/drop_postgresql_database src/cats/create_mysql_database src/cats/update_mysql_tables src/cats/make_mysql_tables src/cats/grant_mysql_privileges src/cats/drop_mysql_tables src/cats/drop_mysql_database src/cats/create_sqlite_database src/cats/update_sqlite_tables src/cats/make_sqlite_tables src/cats/grant_sqlite_privileges src/cats/drop_sqlite_tables src/cats/drop_sqlite_database src/cats/sqlite src/cats/mysql src/cats/create_bdb_database src/cats/update_bdb_tables src/cats/make_bdb_tables src/cats/grant_bdb_privileges src/cats/drop_bdb_tables src/cats/drop_bdb_database src/cats/create_bacula_database src/cats/update_bacula_tables src/cats/grant_bacula_privileges src/cats/make_bacula_tables src/cats/drop_bacula_tables src/cats/drop_bacula_database src/findlib/Makefile src/tools/Makefile src/win32/winbacula.nsi src/win32/bacula-fd.conf src/win32/Makefile $PFILES"
           ac_config_commands="$ac_config_commands default"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
   "src/cats/drop_bacula_database" ) CONFIG_FILES="$CONFIG_FILES src/cats/drop_bacula_database" ;;
   "src/findlib/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/findlib/Makefile" ;;
   "src/tools/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;;
+  "src/win32/winbacula.nsi" ) CONFIG_FILES="$CONFIG_FILES src/win32/winbacula.nsi" ;;
+  "src/win32/bacula-fd.conf" ) CONFIG_FILES="$CONFIG_FILES src/win32/bacula-fd.conf" ;;
+  "src/win32/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/win32/Makefile" ;;
   "$PFILES" ) CONFIG_FILES="$CONFIG_FILES $PFILES" ;;
   "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
   "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h:autoconf/config.h.in" ;;
 
 For 1.33
 - Complete Win32 installer
 - Finish work on Gnome restore GUI.
-- Fix query buffer clobber ua_query.c
 - On unknown client in restore "client=xxx"
   Could not find Client "Matou": ERR=Query failed: DROP TABLE temp1: 
      ERR=no such table: temp1
-- Allow "delete job jobid=xx jobid=xxx".   
 - Implement multiple Volume in "purge jobs volume=".
 - Fix "llist jobid=xx" where no fileset or client exists.
 - Build console in client-only build.
 - Estimate to Tibs never returns.
 - Symbolic link a directory to another one, then backup the symbolic link.
 - Check and possibly fix problems with hard links.
+- Fix query buffer clobber ua_query.c
+- Allow "delete job jobid=xx jobid=xxx".   
+
 
    int i;
 
    db_lock(mdb);
-#ifdef HAVE_POSTGRESQL
+   /* Get one entry per VolumeName, but "sort" by VolIndex */
    Mmsg(&mdb->cmd, 
-        "SELECT DISTINCT VolumeName FROM JobMedia,Media WHERE "
-        "JobMedia.JobId=%u AND JobMedia.MediaId=Media.MediaId ", JobId);
-#else
-   Mmsg(&mdb->cmd, 
-        "SELECT VolumeName,VolIndex FROM JobMedia,Media WHERE "
+        "SELECT VolumeName,MAX(VolIndex) FROM JobMedia,Media WHERE "
         "JobMedia.JobId=%u AND JobMedia.MediaId=Media.MediaId "
         "GROUP BY VolumeName "
-        "ORDER BY VolIndex", JobId);
-#endif
+        "ORDER BY 2 ASC", JobId);
 
    Dmsg1(130, "VolNam=%s\n", mdb->cmd);
    *VolumeNames[0] = 0;
 
  * Delete Pool records (should purge Media with it).
  *
  *  delete pool=<pool-name>
- *  delete media pool=<pool-name> volume=<name>
+ *  delete volume pool=<pool-name> volume=<name>
+ *  delete job jobid=xxx
  */
 static int delete_cmd(UAContext *ua, char *cmd)
 {
       return 1;
    }
 
-     
-   switch (find_arg_keyword(ua, keywords)) {
+   switch (find_arg_keyword(ua, keywords)) {     
    case 0:
       delete_volume(ua);     
       return 1;
       delete_pool(ua);
       return 1;
    case 2:
-      delete_job(ua);
+      int i;
+      while ((i=find_arg(ua, _("jobid"))) > 0) {
+        delete_job(ua);
+        *ua->argk[i] = 0;         /* zap keyword already visited */
+      }
       return 1;
    default:
       break;
    POOLMEM *query = get_pool_memory(PM_MESSAGE);
    JobId_t JobId;
 
-   int i = find_arg_with_value(ua, "jobid");
+   int i = find_arg_with_value(ua, _("jobid"));
    if (i >= 0) {
       JobId = str_to_int64(ua->argv[i]);
    } else if (!get_pint(ua, _("Enter JobId to delete: "))) {
 
  */
 int purgecmd(UAContext *ua, char *cmd)
 {
+   int i;
    CLIENT *client;
    MEDIA_DBR mr;
    JOB_DBR  jr;
       }
    /* Volume */
    case 2:
-      if (select_media_dbr(ua, &mr)) {
-        purge_jobs_from_volume(ua, &mr);
+      while ((i=find_arg(ua, _("volume"))) >= 0) {
+        if (select_media_dbr(ua, &mr)) {
+           purge_jobs_from_volume(ua, &mr);
+        }
+        *ua->argk[i] = 0;            /* zap keyword already seen */
+         bsendmsg(ua, "\n");
       }
       return 1;
    default:
 
    for (i=0; i<9; i++) {
       subst[i] = NULL;
    }
-   /* ****FIXME**** second and third check_pool ... below are probably broken */
-   new_query = get_memory(2000);
-   new_query = check_pool_memory_size(new_query, strlen(query) +100);
+   new_query = get_pool_memory(PM_FNAME);
    o = new_query;
-   olen = 0;
    for (q=query; (p=strchr(q, '%')); ) {
       if (p) {
+       olen = o - new_query;
+       new_query = check_pool_memory_size(new_query, olen + p - q + 10);
+       o = new_query + olen;
         while (q < p) {              /* copy up to % */
            *o++ = *q++;
-           olen++;
         }
         p++;
         switch (*p) {
               p = (char *)malloc(len * 2 + 1);
               db_escape_string(p, ua->cmd, len);
               subst[n] = p;
-              new_query = check_pool_memory_size(new_query, olen + strlen(p) + 1);
+              olen = o - new_query;
+              new_query = check_pool_memory_size(new_query, olen + strlen(p) + 10);
+              o = new_query + olen;
               while (*p) {
                  *o++ = *p++;
-                 olen++;
               }
            } else {
                bsendmsg(ua, _("Warning prompt %d missing.\n"), n+1);
            break;
          case '%':
             *o++ = '%';
-           olen++;
            q += 2;
            break;
         default:
             *o++ = '%';
-           olen++;
            q++;
            break;
         }
       }
    }
-   new_query = check_pool_memory_size(new_query, olen + strlen(q) + 1);
+   olen = o - new_query;
+   new_query = check_pool_memory_size(new_query, olen + strlen(q) + 10);
+   o = new_query + olen;
    while (*q) {
       *o++ = *q++;
    }
 
 /* */
 #undef  VERSION
-#define VERSION "1.33.4"
+#define VERSION "1.33.5"
 #define VSTRING "1"
-#define BDATE   "23 Mar 2004"
-#define LSMDATE "23Mar04"
+#define BDATE   "24 Mar 2004"
+#define LSMDATE "24Mar04"
 
 /* Debug flags */
 #undef  DEBUG
 
 ; winbacula.nsi
 ;
-; written by Michel Meyers (michel@tcnnet.dyndns.org)
+; Written by Michel Meyers (michel@tcnnet.dyndns.org)
 ;
-; ChangeLog
-; v0.1 - initial release (still a lot to do)
+; Updated by Kern Sibbald for native Win32 Bacula
+;
+; Command line options:
+;
+; /cygwin     -  do cygwin install into c:\cygwin\bacula
+; /service    - 
+; /start
 
-;!define TEMP1 $R0 ;Temp variable
-!define VERSION '@VERSION@-@LSMDATE@'
+!define PRODUCT "Bacula"
+!define VERSION "@VERSION@"
 
-SetCompressor lzma
-SetCompressorDictSize 32
+;                           
+; Include the Modern UI
+;
+!include "MUI.nsh"
+!include "params.nsh"
+!include "util.nsh"
 
-; The name of the installer
-Name "Bacula Client"
+;
+; Basics
+;
+  Name "Bacula Client"
+  OutFile "winbacula-${VERSION}.exe"
+  InstallDir "c:\bacula"
 
-; The file to write
-OutFile "winbacula-${VERSION}.exe"
+;
+; Pull in pages
+;
+ !insertmacro MUI_PAGE_WELCOME
+;  !insertmacro MUI_PAGE_LICENSE "License.txt"
+ !insertmacro MUI_PAGE_COMPONENTS
+ !insertmacro MUI_PAGE_DIRECTORY
+ !insertmacro MUI_PAGE_INSTFILES
+ !insertmacro MUI_PAGE_FINISH
 
-; The default installation directory
-InstallDir "c:\bacula"
+ !insertmacro MUI_UNPAGE_WELCOME
+ !insertmacro MUI_UNPAGE_CONFIRM
+ !insertmacro MUI_UNPAGE_INSTFILES
+ !insertmacro MUI_UNPAGE_FINISH
 
-DirText "Setup will install the Bacula Client v${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder.$\n$\nNote to CYGWIN users: please choose your CYGWIN root directory."
-Page directory
-Page instfiles
-UninstPage uninstConfirm
-UninstPage instfiles
-
-;Icon "${NSISDIR}\Contrib\Icons\modern-install.ico"
-;UninstallIcon "${NSISDIR}\Contrib\Icons\modern-uninstall.ico"
-;CheckBitmap "${NSISDIR}\Contrib\Icons\modern.bmp"
-
-; The text to prompt the user to enter a directory
-;ComponentText "This will extract the temporary files needed for controlling your PC remotely."
-; The stuff to install
-
-; -- written by Alexis de Valence --
-; GetONEParameter
-
-; Usage:
-;   Push 3                 ; to get the 3rd parameter of the command line
-;   Call GetONEParameter
-;   Pop $R0                ; saves the result in $R0
-; returns an empty string if not found
-
-Function GetONEParameter
-   Exch $R0
-   Push $R1
-   Push $R2
-   Push $R3
-   Push $R4
-   Push $R5
-   Push $R6
-
-; init variables
-   IntOp $R5 $R0 + 1
-   StrCpy $R2 0
-   StrCpy $R4 1
-   StrCpy $R6 0
-
-   loop3: ; looking for a char that's not a space
-     IntOp $R2 $R2 + 1
-     StrCpy $R0 $CMDLINE 1 $R2
-     StrCmp $R0 " " loop3
-     StrCpy $R3 $R2   ; found the begining of the current parameter
-
-
-   loop:          ; scanning for the end of the current parameter
-
-     StrCpy $R0 $CMDLINE 1 $R2
-     StrCmp $R0 " " loop2
-     StrCmp $R0 "" last
-     IntOp $R2 $R2 + 1
-     Goto loop
-
-   last: ; there will be no other parameter to extract
-   StrCpy $R6 1
-
-   loop2: ; found the end of the current parameter
-
-   IntCmp $R4 $R5 0 NextParam end
-   StrCpy $R6 1 ; to quit after this process
-
-   IntOp $R1 $R2 - $R3 ;number of letter of current parameter
-   StrCpy $R0 $CMDLINE $R1 $R3        ; stores the result in R0
-
-   NextParam:
-   IntCmp $R6 1 end ; leave if found or if not enough parameters
-
-   ; process the next parameter
-   IntOp $R4 $R4 + 1
-
-   Goto loop3
-
-   end:
-
-   Pop $R6  ; restore R0 - R6 to their initial value
-   Pop $R5
-   Pop $R4
-   Pop $R3
-   Pop $R2
-   Pop $R1
-
-   Exch $R0    ;Puts the result on the stack
-
- FunctionEnd
-
-; -- written by Michel Meyers --
-; ParameterGiven - checks first 9 parameters on the command line
-; Usage:
-;   Push "/parameter"                 ; to check command line for /parameter
-;   Call ParameterGiven
-;   Pop $R0                ; saves the result in $R0 (result = true or false)
-
- Function ParameterGiven
-   Exch $R0
-   Push $R1
-   Push $R2
-   Push $R3
-   
-   StrCpy $R1 0
-   StrCpy $R3 0
-   loopme:
-   StrCmp $R1 9 AllChecked
-   IntOp $R1 $R1 + 1
-   Push $R1
-   Call GetONEParameter
-   Pop $R2                ; saves the result in $R2
-   StrCmp $R0 $R2 Found
-   Goto loopme
-   
-   Found:
-   StrCpy $R3 1
-   Goto loopme
-   
-   AllChecked:
-   Exch $R3
-  
- FunctionEnd
 
-Section "Install"
+ !define      MUI_ABORTWARNING
+
+ !insertmacro MUI_LANGUAGE "English"
+
+
+
+DirText "Setup will install the Bacula Client ${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder.$\n$\nNote to CYGWIN users: please choose your CYGWIN root directory."
+
 
+Section "Bacula File Service" SecService
+  ;
   ; /cygwin on command line forces install dir to c:\cygwin\bacula (useful for silent install)
+  ;
   Push "/cygwin"
   Call ParameterGiven
   Pop $6
   StrCmp $6 0 NoCygwin
   StrCpy $INSTDIR "c:\cygwin\bacula"
-  NoCygwin:
+ NoCygwin:
+; IfFileExists "c:\cygwin" Cygwin ReallyNoCygwin
+;Cygwin:
+; StrCpy $INSTDIR "c:\cygwin\bacula"
+;ReallyNoCygwin:
 
   ; Check for existing installation
   StrCpy $7 0
   IfFileExists "$INSTDIR\bin\bacula-fd.conf" Upgrade NoUpgrade
-  Upgrade:
+ Upgrade:
     StrCpy $7 1
     ; Shutdown any baculas that could be running
     ExecWait '"$INSTDIR\bin\bacula-fd.exe" /kill'
-  NoUpgrade:
+    ; give it some time to shutdown
+    Sleep 1000
+ NoUpgrade:
 
   ; Set output path to the installation directory.
   SetOutPath "$INSTDIR\bin"
   ; Put files there
   File baculafd\Release\bacula-fd.exe
   File pthreads\pthreadVCE.dll
-  IfFileExists "$INSTDIR\bacula-fd.conf" newconf 
+  File License.txt
+  IfFileExists "$INSTDIR\bin\bacula-fd.conf" newconf 
   File bacula-fd.conf
   goto do_service
-  newconf:
+ newconf:
   File /oname=bacula-fd.conf.new bacula-fd.conf
        
 
   ; If /service was given jump to the service install part
-  do_service:
+ do_service:
   Push "/service"
   Call ParameterGiven
   Pop $5
 
   ; Install as service?
   MessageBox MB_YESNO|MB_ICONQUESTION "Do you want to install the Bacula Client as a service (automatically starts with your PC)?" IDNO NoService
-  Service:
+ Service:
     ExecWait '"$INSTDIR\bin\bacula-fd.exe" /install'
     StrCpy $9 "1"
     WriteRegDWORD HKLM "Software\Bacula" "InstalledService" "1"
-  NoService:
+ NoService:
 
   ; Write the uninstall keys for Windows
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayName" "Bacula Client"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "UninstallString" '"$INSTDIR\uninstall.exe"'
-  SetOutPath "$INSTDIR"
-  WriteUninstaller "uninstall.exe"
+  WriteUninstaller "$INSTDIR\Uninstall.exe"
 
   ; Create bacula-fd.conf and have the user edit it (skipped if silent)
   IfSilent NoReminder
   StrCmp $7 "1" NoReminder  ; skip if it is an upgrade
   MessageBox MB_OK "Please edit $INSTDIR\bin\bacula-fd.conf according to your requirements/installation! Also remember to put a shortcut into your start menu if you didn't install the client as a service."
-  CopyFiles /SILENT "$INSTDIR\bin\bacula-fd.conf.new" "$INSTDIR\bin\bacula-fd.conf"
   Exec 'write "$INSTDIR\bin\bacula-fd.conf"'  ; spawn wordpad with the file to be edited
-  NoReminder:
+ NoReminder:
 
   ; Start the client? (default skipped if silent, use /start to force starting)
   Push "/start"
   Pop $8
   StrCmp $8 "1" Start
   IfSilent NoStart
+  Call IsNt
+  Pop $R0
+  StrCmp $R0 "false" do_win98
+  MessageBox MB_YESNO|MB_ICONQUESTION  "Would you like to start the Bacula Client now?" IDNO NoStart
+  Exec 'net start bacula'
+  goto NoStart 
+ do_win98:
   MessageBox MB_YESNO|MB_ICONQUESTION  "Would you like to start the Bacula Client now?" IDNO NoStart
-  Start:
-    Exec '"$INSTDIR\bin\bacula-fd.exe" -c "$INSTDIR\bin\bacula-fd.conf"'
-  NoStart:
+ Start:
+  Exec '"$INSTDIR\bin\bacula-fd.exe" -c "$INSTDIR\bin\bacula-fd.conf"'
+ NoStart:
 
 SectionEnd
 
 
+Section "Install Documentation" SecDoc
+SectionEnd
+
+;
+; Extra Page descriptions
+;
+
+  LangString DESC_SecService ${LANG_ENGLISH} "Install Bacula client on this system."
+  LangString DESC_SecDoc ${LANG_ENGLISH} "Install Documenation (not implemented)."
+
+  !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+    !insertmacro MUI_DESCRIPTION_TEXT ${SecService} $(DESC_SecService)
+    !insertmacro MUI_DESCRIPTION_TEXT ${SecDoc} $(DESC_SecDoc)
+  !insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+
+
 ; Uninstall section
 
 UninstallText "This will uninstall the Bacula Client. Hit next to continue."
 
 Section "Uninstall"
-  
-  ; Shutdown any baculas that could be running
+
+  ; Shutdown any baculum that could be running
   ExecWait '"$INSTDIR\bin\bacula-fd.exe" /kill'
 
   ReadRegDWORD $9 HKLM "Software\Bacula" "InstalledService"
   Delete /REBOOTOK "$INSTDIR\bin\*.*"
   CopyFiles /SILENT "$INSTDIR\bacula-fd.conf" "$INSTDIR\bin\bacula-fd.conf"
   Delete /REBOOTOK "$INSTDIR\bacula-fd.conf"
-  Delete /REBOOTOK "$INSTDIR\uninstall.exe"
+  Delete /REBOOTOK "$INSTDIR\Uninstall.exe"
 
   ; Check for existing installation
   MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to delete the current configuration file ($INSTDIR\bin\bacula-fd.conf)?" IDNO LeaveConfig
   
   ; If we need to reboot we'll ask
   IfRebootFlag Reboot Continue
-  Reboot:
+ Reboot:
   MessageBox MB_YESNO|MB_ICONQUESTION "Some files will only be deleted after restarting. Reboot now?" IDNO Continue
     Reboot
-  Continue:
+ Continue:
 
 SectionEnd